phase-loop-runtime 0.7.10__tar.gz → 0.7.11__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 (825) hide show
  1. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/PKG-INFO +3 -1
  2. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/protocol/protocol.md +1 -1
  3. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/pyproject.toml +12 -1
  4. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/__init__.py +1 -1
  5. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/protocol.md +19 -1
  6. phase_loop_runtime-0.7.11/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +72 -0
  7. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/CONTRACTS.md +19 -13
  8. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/__init__.py +56 -0
  9. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/backing.py +53 -2
  10. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/composition.py +2 -2
  11. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/config.py +18 -6
  12. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/fixtures.py +20 -14
  13. phase_loop_runtime-0.7.11/src/phase_loop_runtime/advisor_board/harness_mapping.py +219 -0
  14. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/observability.py +31 -7
  15. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/presets.py +6 -6
  16. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/registries.py +7 -1
  17. phase_loop_runtime-0.7.11/src/phase_loop_runtime/advisor_board/research.py +528 -0
  18. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/schema.py +87 -4
  19. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/baml_modular.py +6 -0
  20. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml +35 -0
  21. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/build_bundle.py +7 -2
  22. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/capability_registry.py +36 -3
  23. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/cli.py +429 -3
  24. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/closeout.py +15 -1
  25. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/closeout_validators.py +56 -0
  26. phase_loop_runtime-0.7.11/src/phase_loop_runtime/convergence/broker/credsep.py +316 -0
  27. phase_loop_runtime-0.7.11/src/phase_loop_runtime/fab_canonical.py +908 -0
  28. phase_loop_runtime-0.7.11/src/phase_loop_runtime/fab_delta.py +1443 -0
  29. phase_loop_runtime-0.7.11/src/phase_loop_runtime/fab_gate.py +2026 -0
  30. phase_loop_runtime-0.7.11/src/phase_loop_runtime/fab_producer.py +746 -0
  31. phase_loop_runtime-0.7.11/src/phase_loop_runtime/fab_provenance.py +1828 -0
  32. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/governed_bundle.py +60 -0
  33. phase_loop_runtime-0.7.11/src/phase_loop_runtime/governed_premerge.py +393 -0
  34. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/launcher.py +114 -15
  35. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/models.py +762 -9
  36. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/observability.py +31 -1
  37. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/panel_invoker.py +993 -195
  38. phase_loop_runtime-0.7.11/src/phase_loop_runtime/profiles.py +935 -0
  39. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/reconcile.py +127 -11
  40. phase_loop_runtime-0.7.11/src/phase_loop_runtime/redaction.py +666 -0
  41. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/runner.py +1092 -108
  42. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/runtime_paths.py +9 -3
  43. phase_loop_runtime-0.7.11/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +80 -0
  44. phase_loop_runtime-0.7.11/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +80 -0
  45. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +12 -8
  46. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +2 -2
  47. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +20 -20
  48. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +20 -20
  49. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +1 -1
  50. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +16 -2
  51. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +16 -2
  52. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +16 -2
  53. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +16 -2
  54. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/train_ledger.py +89 -5
  55. phase_loop_runtime-0.7.11/src/phase_loop_runtime/train_runner.py +3208 -0
  56. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/verification_evidence.py +222 -7
  57. phase_loop_runtime-0.7.11/src/phase_loop_runtime/visual_avatar_evidence_validator.py +220 -0
  58. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime.egg-info/PKG-INFO +3 -1
  59. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime.egg-info/SOURCES.txt +26 -0
  60. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime.egg-info/requires.txt +3 -0
  61. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_backcompat.py +24 -11
  62. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_backing_homebrew.py +24 -23
  63. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_backing_omnigent.py +2 -2
  64. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_config.py +30 -3
  65. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_golden.py +38 -37
  66. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_integration.py +24 -3
  67. phase_loop_runtime-0.7.11/tests/test_advisor_board_live_research.py +145 -0
  68. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_observability.py +35 -5
  69. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_presets.py +15 -9
  70. phase_loop_runtime-0.7.11/tests/test_advisor_board_research.py +627 -0
  71. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_resolver.py +5 -7
  72. phase_loop_runtime-0.7.11/tests/test_closeout_verification_gate.py +418 -0
  73. phase_loop_runtime-0.7.11/tests/test_committed_range_diff.py +73 -0
  74. phase_loop_runtime-0.7.11/tests/test_convergence_broker_credsep.py +721 -0
  75. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_live_enable.py +11 -11
  76. phase_loop_runtime-0.7.11/tests/test_delegated_visual_evidence_91.py +351 -0
  77. phase_loop_runtime-0.7.11/tests/test_fab_activation_promotion.py +1468 -0
  78. phase_loop_runtime-0.7.11/tests/test_fab_canonical_b.py +873 -0
  79. phase_loop_runtime-0.7.11/tests/test_fab_closeout_crash_safety.py +689 -0
  80. phase_loop_runtime-0.7.11/tests/test_fab_closeout_wiring.py +198 -0
  81. phase_loop_runtime-0.7.11/tests/test_fab_delta_c.py +1782 -0
  82. phase_loop_runtime-0.7.11/tests/test_fab_delta_consumer.py +937 -0
  83. phase_loop_runtime-0.7.11/tests/test_fab_gate_d.py +1886 -0
  84. phase_loop_runtime-0.7.11/tests/test_fab_producer.py +299 -0
  85. phase_loop_runtime-0.7.11/tests/test_fab_provenance_a.py +833 -0
  86. phase_loop_runtime-0.7.11/tests/test_gate_parity_244_245.py +511 -0
  87. phase_loop_runtime-0.7.11/tests/test_grok_narrow_reject_231.py +243 -0
  88. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_hotfix_lane.py +63 -0
  89. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_leg_liveness_monitor.py +1 -0
  90. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_model_class_policy.py +84 -13
  91. phase_loop_runtime-0.7.11/tests/test_model_tier_taxonomy.py +431 -0
  92. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_invoker_spawn.py +52 -15
  93. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_leg_auth_preflight_64.py +85 -0
  94. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_native_fill_183.py +33 -38
  95. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_per_leg_model_66.py +1 -1
  96. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_streaming_verdicts.py +2 -2
  97. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_tui_liveness_188.py +99 -1
  98. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_tui_workspace_trust_223.py +5 -0
  99. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_baml_modular.py +14 -1
  100. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_execution_policy.py +32 -2
  101. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_launcher.py +51 -7
  102. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_models.py +7 -0
  103. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_protocol_contract.py +14 -1
  104. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_reconcile.py +32 -0
  105. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_runner.py +279 -9
  106. phase_loop_runtime-0.7.11/tests/test_reconcile_portability_85c.py +1112 -0
  107. phase_loop_runtime-0.7.11/tests/test_reconcile_visual_avatar_evidence_91.py +885 -0
  108. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_routing_invariants.py +3 -1
  109. phase_loop_runtime-0.7.11/tests/test_runner_visual_evidence_authoritative_91.py +306 -0
  110. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_skills_canon_parity.py +3 -3
  111. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_train_e2e.py +14 -14
  112. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_train_invariants.py +14 -14
  113. phase_loop_runtime-0.7.11/tests/test_train_merge.py +3005 -0
  114. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_train_prebuilt.py +157 -0
  115. phase_loop_runtime-0.7.11/tests/test_verification_evidence.py +2524 -0
  116. phase_loop_runtime-0.7.11/tests/test_visual_avatar_evidence_validator.py +979 -0
  117. phase_loop_runtime-0.7.10/src/phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +0 -60
  118. phase_loop_runtime-0.7.10/src/phase_loop_runtime/advisor_board/harness_mapping.py +0 -144
  119. phase_loop_runtime-0.7.10/src/phase_loop_runtime/convergence/broker/credsep.py +0 -211
  120. phase_loop_runtime-0.7.10/src/phase_loop_runtime/governed_premerge.py +0 -219
  121. phase_loop_runtime-0.7.10/src/phase_loop_runtime/profiles.py +0 -479
  122. phase_loop_runtime-0.7.10/src/phase_loop_runtime/redaction.py +0 -184
  123. phase_loop_runtime-0.7.10/src/phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +0 -69
  124. phase_loop_runtime-0.7.10/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +0 -69
  125. phase_loop_runtime-0.7.10/src/phase_loop_runtime/train_runner.py +0 -1526
  126. phase_loop_runtime-0.7.10/tests/test_closeout_verification_gate.py +0 -167
  127. phase_loop_runtime-0.7.10/tests/test_convergence_broker_credsep.py +0 -349
  128. phase_loop_runtime-0.7.10/tests/test_reconcile_portability_85c.py +0 -251
  129. phase_loop_runtime-0.7.10/tests/test_train_merge.py +0 -1615
  130. phase_loop_runtime-0.7.10/tests/test_verification_evidence.py +0 -618
  131. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/MANIFEST.in +0 -0
  132. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/README.md +0 -0
  133. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/setup.cfg +0 -0
  134. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +0 -0
  135. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +0 -0
  136. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +0 -0
  137. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +0 -0
  138. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +0 -0
  139. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +0 -0
  140. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +0 -0
  141. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +0 -0
  142. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +0 -0
  143. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +0 -0
  144. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +0 -0
  145. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +0 -0
  146. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_proc_cpu.py +0 -0
  147. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +0 -0
  148. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +0 -0
  149. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +0 -0
  150. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +0 -0
  151. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +0 -0
  152. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +0 -0
  153. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +0 -0
  154. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +0 -0
  155. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +0 -0
  156. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +0 -0
  157. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +0 -0
  158. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +0 -0
  159. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +0 -0
  160. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +0 -0
  161. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +0 -0
  162. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +0 -0
  163. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +0 -0
  164. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +0 -0
  165. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +0 -0
  166. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +0 -0
  167. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +0 -0
  168. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +0 -0
  169. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +0 -0
  170. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +0 -0
  171. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +0 -0
  172. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +0 -0
  173. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +0 -0
  174. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +0 -0
  175. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +0 -0
  176. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +0 -0
  177. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +0 -0
  178. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +0 -0
  179. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +0 -0
  180. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +0 -0
  181. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +0 -0
  182. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +0 -0
  183. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +0 -0
  184. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +0 -0
  185. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +0 -0
  186. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/adoption_bundle.py +0 -0
  187. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/backing_omnigent.py +0 -0
  188. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/events.py +0 -0
  189. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +0 -0
  190. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/matrix.py +0 -0
  191. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/resolver.py +0 -0
  192. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/standin.py +0 -0
  193. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/advisor_board/validation.py +0 -0
  194. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/agent_runtime_provider.py +0 -0
  195. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +0 -0
  196. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/baml_src/dotfiles_c4_document.baml +0 -0
  197. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +0 -0
  198. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +0 -0
  199. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +0 -0
  200. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +0 -0
  201. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/baml_src/verification_evidence.baml +0 -0
  202. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/broker.py +0 -0
  203. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/classifier.py +0 -0
  204. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/claude_agent_view.py +0 -0
  205. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/claude_channel_sidecar.py +0 -0
  206. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/closeout_classifier.py +0 -0
  207. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/closeout_evidence_audit.py +0 -0
  208. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/closeout_validation.py +0 -0
  209. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/__init__.py +0 -0
  210. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/certificate_tier.py +0 -0
  211. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/git_grounded_projection.py +0 -0
  212. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/outside_agent_advisory.py +0 -0
  213. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/outside_agent_core.py +0 -0
  214. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/outside_agent_imports.py +0 -0
  215. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/outside_agent_pin.py +0 -0
  216. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/outside_agent_provenance.py +0 -0
  217. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/outside_agent_real.py +0 -0
  218. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/outside_agent_real_output.py +0 -0
  219. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/outside_agent_redaction.py +0 -0
  220. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/outside_agent_schema.py +0 -0
  221. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/conformance/outside_agent_vectors.py +0 -0
  222. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/consiliency_gates.py +0 -0
  223. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/consiliency_ingest.py +0 -0
  224. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/consiliency_layout.py +0 -0
  225. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/consiliency_scaffold.py +0 -0
  226. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/__init__.py +0 -0
  227. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/adapters/__init__.py +0 -0
  228. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/adapters/base.py +0 -0
  229. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/adapters/claude.py +0 -0
  230. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/adapters/codex.py +0 -0
  231. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/adapters/outside_agent.py +0 -0
  232. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/broker/__init__.py +0 -0
  233. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/broker/admission.py +0 -0
  234. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/broker/evidence.py +0 -0
  235. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/broker/live.py +0 -0
  236. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/broker/verbs.py +0 -0
  237. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/contracts.py +0 -0
  238. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/dispatch.py +0 -0
  239. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/event_log.py +0 -0
  240. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/fencing.py +0 -0
  241. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/provider_contracts.py +0 -0
  242. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/reconcile.py +0 -0
  243. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/refresh.py +0 -0
  244. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/convergence/status.py +0 -0
  245. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/cross_repo_channel.py +0 -0
  246. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/default_executor_resolver.py +0 -0
  247. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/deploy/phase-loop-task-message-broker.service +0 -0
  248. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/discovery.py +0 -0
  249. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/dispatch_lock.py +0 -0
  250. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/doc_delta_validator.py +0 -0
  251. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/docs_audit.py +0 -0
  252. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/docs_freshness.py +0 -0
  253. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/docs_surfaces.py +0 -0
  254. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/doctor.py +0 -0
  255. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/dotfiles_profile_plugin.py +0 -0
  256. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/events.py +0 -0
  257. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/events_migration.py +0 -0
  258. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/evidence_audit.py +0 -0
  259. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/evidence_audit_config.py +0 -0
  260. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/executor_availability.py +0 -0
  261. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/fleet_map.py +0 -0
  262. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/fleet_metrics.py +0 -0
  263. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/fleet_metrics_export.py +0 -0
  264. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/gate_posture.py +0 -0
  265. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/git_discipline.py +0 -0
  266. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/git_ops.py +0 -0
  267. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/git_topology.py +0 -0
  268. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/goal_coverage.py +0 -0
  269. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/governed_review.py +0 -0
  270. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/handoff.py +0 -0
  271. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/handoff_path.py +0 -0
  272. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/harness_env_signatures.py +0 -0
  273. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/injection.py +0 -0
  274. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/install_status.py +0 -0
  275. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/lane_scheduler.py +0 -0
  276. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/lease_store.py +0 -0
  277. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/maintenance.py +0 -0
  278. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/migrate_handoffs.py +0 -0
  279. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/phase_loop_drift_audit.py +0 -0
  280. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/phase_worktree_executor.py +0 -0
  281. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/pipeline_adapter/__init__.py +0 -0
  282. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/pipeline_adapter/branch_ops.py +0 -0
  283. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/pipeline_adapter/flag.py +0 -0
  284. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/pipeline_adapter/markers.py +0 -0
  285. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/pipeline_adapter/merge_policy.py +0 -0
  286. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/pipeline_adapter/ratification.py +0 -0
  287. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/pipeline_adapter/sibling_matcher.py +0 -0
  288. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/plan_ir.py +0 -0
  289. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/plan_manifest.py +0 -0
  290. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/planner_validation.py +0 -0
  291. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/prompts.py +0 -0
  292. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/provenance.py +0 -0
  293. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/publishing.py +0 -0
  294. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/py.typed +0 -0
  295. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/ratification_policy.py +0 -0
  296. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/reflection_sync.py +0 -0
  297. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/release_guard.py +0 -0
  298. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/render.py +0 -0
  299. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/repo_validation.py +0 -0
  300. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/review_summary.py +0 -0
  301. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/roadmap_authority.py +0 -0
  302. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/roadmap_lint.py +0 -0
  303. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/route_log.py +0 -0
  304. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/route_policy/__init__.py +0 -0
  305. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +0 -0
  306. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/runtime_projection.py +0 -0
  307. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/runtime_resources.py +0 -0
  308. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/schema_export.py +0 -0
  309. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.golden.json +0 -0
  310. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/schemas/phase-loop-doctor.v1.schema.json +0 -0
  311. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/schemas/phase_loop_closeout.schema.json +0 -0
  312. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skill_install.py +0 -0
  313. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skill_inventory.py +0 -0
  314. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skill_paths.py +0 -0
  315. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skill_sources_plugin.py +0 -0
  316. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +0 -0
  317. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +0 -0
  318. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +0 -0
  319. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +0 -0
  320. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +0 -0
  321. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  322. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  323. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  324. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  325. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  326. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  327. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  328. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  329. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +0 -0
  330. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  331. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +0 -0
  332. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +0 -0
  333. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +0 -0
  334. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +0 -0
  335. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +0 -0
  336. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +0 -0
  337. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +0 -0
  338. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +0 -0
  339. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  340. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +0 -0
  341. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  342. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +0 -0
  343. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +0 -0
  344. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +0 -0
  345. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +0 -0
  346. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +0 -0
  347. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +0 -0
  348. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-run-train/README.md +0 -0
  349. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +0 -0
  350. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +0 -0
  351. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +0 -0
  352. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +0 -0
  353. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +0 -0
  354. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +0 -0
  355. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  356. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +0 -0
  357. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +0 -0
  358. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +0 -0
  359. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +0 -0
  360. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +0 -0
  361. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +0 -0
  362. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +0 -0
  363. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +0 -0
  364. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +0 -0
  365. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  366. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  367. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  368. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  369. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  370. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  371. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  372. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  373. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +0 -0
  374. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  375. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +0 -0
  376. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +0 -0
  377. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +0 -0
  378. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +0 -0
  379. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +0 -0
  380. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +0 -0
  381. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +0 -0
  382. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +0 -0
  383. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  384. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +0 -0
  385. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  386. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +0 -0
  387. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +0 -0
  388. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +0 -0
  389. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +0 -0
  390. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +0 -0
  391. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +0 -0
  392. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-run-train/README.md +0 -0
  393. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +0 -0
  394. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +0 -0
  395. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +0 -0
  396. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +0 -0
  397. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +0 -0
  398. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +0 -0
  399. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  400. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +0 -0
  401. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +0 -0
  402. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +0 -0
  403. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +0 -0
  404. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +0 -0
  405. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +0 -0
  406. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +0 -0
  407. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +0 -0
  408. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +0 -0
  409. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  410. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  411. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  412. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  413. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  414. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  415. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  416. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  417. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +0 -0
  418. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  419. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +0 -0
  420. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +0 -0
  421. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +0 -0
  422. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +0 -0
  423. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +0 -0
  424. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +0 -0
  425. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +0 -0
  426. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +0 -0
  427. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  428. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +0 -0
  429. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  430. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +0 -0
  431. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +0 -0
  432. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +0 -0
  433. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +0 -0
  434. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +0 -0
  435. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +0 -0
  436. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +0 -0
  437. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-run-train/README.md +0 -0
  438. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +0 -0
  439. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +0 -0
  440. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +0 -0
  441. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +0 -0
  442. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +0 -0
  443. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +0 -0
  444. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  445. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +0 -0
  446. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +0 -0
  447. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +0 -0
  448. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +0 -0
  449. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +0 -0
  450. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +0 -0
  451. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +0 -0
  452. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +0 -0
  453. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +0 -0
  454. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +0 -0
  455. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +0 -0
  456. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +0 -0
  457. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +0 -0
  458. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +0 -0
  459. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +0 -0
  460. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/prune_merged_worktrees.sh +0 -0
  461. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +0 -0
  462. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +0 -0
  463. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +0 -0
  464. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +0 -0
  465. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +0 -0
  466. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +0 -0
  467. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +0 -0
  468. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +0 -0
  469. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +0 -0
  470. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +0 -0
  471. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +0 -0
  472. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +0 -0
  473. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +0 -0
  474. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +0 -0
  475. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +0 -0
  476. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +0 -0
  477. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +0 -0
  478. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +0 -0
  479. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +0 -0
  480. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +0 -0
  481. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +0 -0
  482. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-run-train/README.md +0 -0
  483. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +0 -0
  484. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +0 -0
  485. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +0 -0
  486. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +0 -0
  487. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +0 -0
  488. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +0 -0
  489. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +0 -0
  490. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +0 -0
  491. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +0 -0
  492. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +0 -0
  493. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/state.py +0 -0
  494. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/state_degradation.py +0 -0
  495. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/state_ops.py +0 -0
  496. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/task_message_broker.py +0 -0
  497. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/task_message_broker_client.py +0 -0
  498. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/task_message_resolver.py +0 -0
  499. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/train_roadmap.py +0 -0
  500. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/verification_evidence_validator.py +0 -0
  501. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/visual_evidence_validator.py +0 -0
  502. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/worker_pool.py +0 -0
  503. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime/worktree_index.py +0 -0
  504. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime.egg-info/dependency_links.txt +0 -0
  505. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime.egg-info/entry_points.txt +0 -0
  506. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/src/phase_loop_runtime.egg-info/top_level.txt +0 -0
  507. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_advisory_mode.py +0 -0
  508. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_alias_install.py +0 -0
  509. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_cli_legacy.py +0 -0
  510. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_composition.py +0 -0
  511. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_concurrency.py +0 -0
  512. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_ingestion.py +0 -0
  513. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_matrix.py +0 -0
  514. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_registries.py +0 -0
  515. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_board_schema.py +0 -0
  516. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_advisor_twin_alias_legacy.py +0 -0
  517. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_agent_runtime_provider_cs08.py +0 -0
  518. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_autosel.py +0 -0
  519. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_branchgov_preflight.py +0 -0
  520. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_certificate_tier.py +0 -0
  521. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_cli_train_status_45.py +0 -0
  522. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_closeout_break_glass_cli.py +0 -0
  523. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_closeout_classifier.py +0 -0
  524. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_closeout_convergence_fixes.py +0 -0
  525. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_closeout_exception_vocab.py +0 -0
  526. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_closeout_gitignored_disposable_186b.py +0 -0
  527. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_closeout_new_owned_directory_closes_clean.py +0 -0
  528. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_closeout_validator_hook.py +0 -0
  529. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_codex_effort_max_clamp_49.py +0 -0
  530. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_conformance_golden.py +0 -0
  531. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_consiliency_dual_layout.py +0 -0
  532. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_consiliency_gates.py +0 -0
  533. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_consiliency_ingest.py +0 -0
  534. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_consiliency_scaffold.py +0 -0
  535. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_adapters.py +0 -0
  536. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_broker_admission.py +0 -0
  537. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_broker_api.py +0 -0
  538. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_broker_evidence.py +0 -0
  539. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_broker_verbs.py +0 -0
  540. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_cli_integration.py +0 -0
  541. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_coordination_contracts.py +0 -0
  542. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_dispatch.py +0 -0
  543. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_event_contracts.py +0 -0
  544. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_event_log.py +0 -0
  545. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_fencing.py +0 -0
  546. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_fixture_contracts.py +0 -0
  547. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_invalidation.py +0 -0
  548. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_provider_contracts.py +0 -0
  549. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_reconcile.py +0 -0
  550. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_refresh.py +0 -0
  551. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_runtime_imports.py +0 -0
  552. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_seat_lifecycle.py +0 -0
  553. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_status.py +0 -0
  554. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_convergence_train_integration.py +0 -0
  555. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_coordinator_wave_loop.py +0 -0
  556. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_cr_fixes_pr220.py +0 -0
  557. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_discovery_hygiene_legacy.py +0 -0
  558. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_dispatch_lock_cross_roadmap.py +0 -0
  559. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_dispatch_lock_helper.py +0 -0
  560. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_dispatch_lock_reentrancy.py +0 -0
  561. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_dispatch_lock_same_roadmap.py +0 -0
  562. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_doc_delta_validator.py +0 -0
  563. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_docs_audit.py +0 -0
  564. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_docs_freshness.py +0 -0
  565. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_doctor_bom.py +0 -0
  566. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_dotfiles_tree.py +0 -0
  567. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_execgov.py +0 -0
  568. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_execreg_launch_registry.py +0 -0
  569. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_execute_phase_handoff_mode.py +0 -0
  570. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_execution_policy_tiering.py +0 -0
  571. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_executor_availability.py +0 -0
  572. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_export_schema.py +0 -0
  573. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_fleet_map.py +0 -0
  574. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_fleet_metrics.py +0 -0
  575. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_fleet_metrics_export.py +0 -0
  576. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_gate_a_wheel_isolation.py +0 -0
  577. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_gate_posture.py +0 -0
  578. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_git_discipline.py +0 -0
  579. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_git_grounded_projection.py +0 -0
  580. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_goal_coverage.py +0 -0
  581. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_governed_disjointness_model_first.py +0 -0
  582. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_governed_e2e.py +0 -0
  583. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_governed_gate_crfixes.py +0 -0
  584. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_governed_planning_gate.py +0 -0
  585. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_governed_premerge.py +0 -0
  586. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_governed_premerge_live.py +0 -0
  587. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_governed_review.py +0 -0
  588. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_grokexec.py +0 -0
  589. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_injection_skill_failloud.py +0 -0
  590. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_lane_ir_override.py +0 -0
  591. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_launcher_liveness.py +0 -0
  592. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_launchspec_golden.py +0 -0
  593. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_lease_store.py +0 -0
  594. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_lease_store_conformance.py +0 -0
  595. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_ledger_serialization.py +0 -0
  596. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_manifest_per_entry_164.py +0 -0
  597. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_model_id_source_guard.py +0 -0
  598. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_nonzero_suite_command_fails_closed.py +0 -0
  599. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_observability_alerting.py +0 -0
  600. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_advisory.py +0 -0
  601. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_advisory_cli.py +0 -0
  602. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_advisory_fixtures.py +0 -0
  603. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_authority_boundary.py +0 -0
  604. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_contract_drift.py +0 -0
  605. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_contract_imports.py +0 -0
  606. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_contract_pin.py +0 -0
  607. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_core_api.py +0 -0
  608. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_provenance.py +0 -0
  609. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_real_ci.py +0 -0
  610. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_real_cli.py +0 -0
  611. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_real_output.py +0 -0
  612. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_real_runtime.py +0 -0
  613. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_redaction.py +0 -0
  614. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_release_surface.py +0 -0
  615. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_schema_validation.py +0 -0
  616. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_outside_agent_vectors.py +0 -0
  617. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_advisory_mode_63.py +0 -0
  618. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_codex_auth_signature_body_252.py +0 -0
  619. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_context_refs_114.py +0 -0
  620. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_invoker.py +0 -0
  621. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_invoker_timeout_argv.py +0 -0
  622. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_tui_eof_48.py +0 -0
  623. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_panel_verdict_summary.py +0 -0
  624. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_parallel_dispatch_backcompat.py +0 -0
  625. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_parallel_dispatch_cli.py +0 -0
  626. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_adoption_bundle.py +0 -0
  627. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_adoption_bundle_cli.py +0 -0
  628. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_baml_dependency.py +0 -0
  629. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_baml_end_to_end.py +0 -0
  630. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_baml_injection.py +0 -0
  631. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_baml_prompt_taxonomy.py +0 -0
  632. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_baml_runner_closeout.py +0 -0
  633. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_baml_schema_export.py +0 -0
  634. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_baml_schema_source.py +0 -0
  635. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_branch_divergence_event.py +0 -0
  636. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_break_glass_rerun.py +0 -0
  637. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_build_bundle.py +0 -0
  638. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_classifier.py +0 -0
  639. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_claude_agent_view_adapter.py +0 -0
  640. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_claude_agent_view_lifecycle.py +0 -0
  641. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_claude_channel_hooks.py +0 -0
  642. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_claude_channel_mcp.py +0 -0
  643. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_claude_channel_security.py +0 -0
  644. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_claude_channel_session_launch.py +0 -0
  645. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_claude_channel_sidecar.py +0 -0
  646. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_claude_channel_smoke_suite.py +0 -0
  647. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_claude_route_selection.py +0 -0
  648. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_cli.py +0 -0
  649. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_cli_plugin_load.py +0 -0
  650. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_closeout_control_only.py +0 -0
  651. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_closeout_event.py +0 -0
  652. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_closeout_evidence_audit.py +0 -0
  653. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_closeout_hardening.py +0 -0
  654. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_closeout_owned_dirty_fallback.py +0 -0
  655. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_closeout_schema.py +0 -0
  656. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_closeout_validation.py +0 -0
  657. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_collaborator_citation.py +0 -0
  658. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_collaborator_docs.py +0 -0
  659. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_collaborator_rollback.py +0 -0
  660. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_concurrent_phase_dispatch.py +0 -0
  661. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_def4_writer_namespacing.py +0 -0
  662. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_dirty_path_classify_phase_owned_tests.py +0 -0
  663. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_dirty_path_classify_previous_phase_owned.py +0 -0
  664. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_discovery.py +0 -0
  665. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_docs.py +0 -0
  666. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_dotfiles_schemas.py +0 -0
  667. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_dotfiles_sources.py +0 -0
  668. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_downstream_governed_pipeline.py +0 -0
  669. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_downstream_instruction_scope_readme.py +0 -0
  670. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_downstream_portal.py +0 -0
  671. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_downstream_regenesis.py +0 -0
  672. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_drift_audit.py +0 -0
  673. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_dry_run_closeout_guard.py +0 -0
  674. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_dry_run_then_run.py +0 -0
  675. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_events_migration.py +0 -0
  676. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_evidence_audit.py +0 -0
  677. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_evidence_audit_runner.py +0 -0
  678. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_evidence_audit_tier2.py +0 -0
  679. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_evidence_audit_tier3.py +0 -0
  680. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_evidence_audit_tuning.py +0 -0
  681. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_executor_degradation.py +0 -0
  682. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_full_phase_mode.py +0 -0
  683. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_handoff.py +0 -0
  684. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_handoff_migration.py +0 -0
  685. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_init.py +0 -0
  686. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_injection.py +0 -0
  687. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_install_status.py +0 -0
  688. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_issue_84_explicit_phase.py +0 -0
  689. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_lane_harnesses.py +0 -0
  690. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_lane_ir.py +0 -0
  691. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_lane_ir_fixtures.py +0 -0
  692. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_lane_scheduler.py +0 -0
  693. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_ledger_debug.py +0 -0
  694. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_ledger_dedup.py +0 -0
  695. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_live_adapters.py +0 -0
  696. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_maintenance.py +0 -0
  697. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_metrics.py +0 -0
  698. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_migration_regressions.py +0 -0
  699. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_mixedrun_dispatch.py +0 -0
  700. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_mixedrun_matrix.py +0 -0
  701. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_mixedrun_observability.py +0 -0
  702. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_native_flags.py +0 -0
  703. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_parallel_plan_safe.py +0 -0
  704. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_pi_executor.py +0 -0
  705. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_pipeline_boundaries.py +0 -0
  706. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_pipeline_bridge.py +0 -0
  707. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_pipeline_bundle.py +0 -0
  708. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_pipeline_closeout.py +0 -0
  709. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_pipeline_freshness.py +0 -0
  710. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_pipeline_mode.py +0 -0
  711. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_plan_doc_skip.py +0 -0
  712. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_plan_manifest.py +0 -0
  713. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_planner_redispatch_when_plan_current.py +0 -0
  714. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_planner_validation.py +0 -0
  715. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_policy.py +0 -0
  716. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_provenance.py +0 -0
  717. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_reconcile_blocker_self_clear.py +0 -0
  718. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_reconcile_recovery_mode.py +0 -0
  719. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_reconcile_to_status_planned_recovery.py +0 -0
  720. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_reducers.py +0 -0
  721. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_repair_precondition_planned_closeout.py +0 -0
  722. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_repair_skipped_when_blocker_cleared.py +0 -0
  723. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_roadmap_amendments.py +0 -0
  724. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_roadmap_validate.py +0 -0
  725. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_rotation.py +0 -0
  726. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_runner_closeout_validation.py +0 -0
  727. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_runtime_boundary.py +0 -0
  728. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_runtime_decouple.py +0 -0
  729. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_runtime_package_data.py +0 -0
  730. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_runtime_projection.py +0 -0
  731. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_schema_flow.py +0 -0
  732. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_skill_baml_closeout.py +0 -0
  733. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_skill_bridge_contract.py +0 -0
  734. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_skill_contract.py +0 -0
  735. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_skill_execute_contract.py +0 -0
  736. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_skill_install.py +0 -0
  737. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_skill_planner_contract.py +0 -0
  738. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_smoke_blockers.py +0 -0
  739. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_smoke_exhaustion.py +0 -0
  740. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_smoke_reentry.py +0 -0
  741. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_spurious_completion_rejection.py +0 -0
  742. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_start_gate_phase_status.py +0 -0
  743. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_start_gate_refuses_cross_phase_dirty.py +0 -0
  744. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_state.py +0 -0
  745. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_status_transition_events_emitted.py +0 -0
  746. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_substrate_soak_docs.py +0 -0
  747. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_substrate_soak_governed.py +0 -0
  748. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_substrate_soak_portal.py +0 -0
  749. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_terminal_summary_mirrors_baml_closeout.py +0 -0
  750. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_v22_e2e.py +0 -0
  751. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_v22_principles.py +0 -0
  752. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_v45_found_contracts.py +0 -0
  753. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_v45_reconcile.py +0 -0
  754. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_v45_sched.py +0 -0
  755. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_v45_schedharden.py +0 -0
  756. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_wave_runner.py +0 -0
  757. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_work_unit_observability.py +0 -0
  758. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_work_unit_runner.py +0 -0
  759. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_work_unit_state.py +0 -0
  760. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_loop_worktrees.py +0 -0
  761. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_owned_dirty_relaxation.py +0 -0
  762. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_phase_worktree_executor.py +0 -0
  763. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pipeline_adapter_branch_ops_create.py +0 -0
  764. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pipeline_adapter_branch_ops_rebase_conflict.py +0 -0
  765. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pipeline_adapter_branch_ops_refuse_default.py +0 -0
  766. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pipeline_adapter_flag.py +0 -0
  767. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pipeline_adapter_markers.py +0 -0
  768. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pipeline_adapter_merge_policy_parse.py +0 -0
  769. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pipeline_adapter_ratification_event_payload.py +0 -0
  770. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pipeline_adapter_ratification_runner.py +0 -0
  771. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pipeline_adapter_ratification_skipped_standalone.py +0 -0
  772. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pipeline_adapter_standalone_regression.py +0 -0
  773. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pkg_layout_freeze.py +0 -0
  774. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_plan_ir_iter_waves.py +0 -0
  775. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_preflight_verification.py +0 -0
  776. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_proc_cpu.py +0 -0
  777. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_prune_merged_worktrees_script.py +0 -0
  778. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_publishing.py +0 -0
  779. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_pushflow.py +0 -0
  780. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_ratification_policy.py +0 -0
  781. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_reconcile_manifest_dedup_46.py +0 -0
  782. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_reconcile_tracked_closeout_recovery_90.py +0 -0
  783. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_reconcile_verification_log.py +0 -0
  784. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_reflection_sync.py +0 -0
  785. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_release_dispatch_operator_approval_145.py +0 -0
  786. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_release_pin_autotrack.py +0 -0
  787. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_repo_validation.py +0 -0
  788. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_review_leg_sandbox.py +0 -0
  789. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_review_summary.py +0 -0
  790. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_roadmap_authority.py +0 -0
  791. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_route_log.py +0 -0
  792. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_route_policy_conformance.py +0 -0
  793. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_runtime_state_mirror_agreement.py +0 -0
  794. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_self_asserted_passed_without_evidence_is_gated.py +0 -0
  795. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_sibling_matcher_patterns.py +0 -0
  796. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_skill_bundle_pinned.py +0 -0
  797. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_skill_install_body_expansion.py +0 -0
  798. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_skill_plan_manifest_write.py +0 -0
  799. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_skill_sources_seam.py +0 -0
  800. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_skills_bundle_drift.py +0 -0
  801. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_skills_src_claude_literal_lint.py +0 -0
  802. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_spec_conformance_gate.py +0 -0
  803. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_specpkgmin_wheel.py +0 -0
  804. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_status_read_only_62.py +0 -0
  805. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_suite_interpreter_satisfies_requires_python.py +0 -0
  806. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_sweep_fleet_worktrees_script.py +0 -0
  807. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_sync_skills_apply_failloud.py +0 -0
  808. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_task_message_broker.py +0 -0
  809. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_task_message_broker_cli.py +0 -0
  810. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_task_message_resolver.py +0 -0
  811. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_train_order_only_deps_47.py +0 -0
  812. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_train_roadmap.py +0 -0
  813. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_train_runner.py +0 -0
  814. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_unattended_release.py +0 -0
  815. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_v34_parallel_dispatch_soak.py +0 -0
  816. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_validate_plan_doc_docs_lane.py +0 -0
  817. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_validate_plan_doc_goal_coverage.py +0 -0
  818. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_validate_plan_doc_producer_dependency.py +0 -0
  819. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_verification_evidence_validator.py +0 -0
  820. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_verification_interpreter_guard_221.py +0 -0
  821. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_visual_evidence_validator.py +0 -0
  822. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_workerpool_failure_isolation.py +0 -0
  823. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_workerpool_parallel.py +0 -0
  824. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/tests/test_workerpool_worktree_alloc.py +0 -0
  825. {phase_loop_runtime-0.7.10 → phase_loop_runtime-0.7.11}/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.7.10
3
+ Version: 0.7.11
4
4
  Summary: Harness-neutral phase-loop orchestration runtime and CLI
5
5
  Author-email: ViperJuice <viperjuice@users.noreply.github.com>
6
6
  License-Expression: Apache-2.0
@@ -24,6 +24,8 @@ Requires-Dist: packaging>=21
24
24
  Requires-Dist: websockets<16,>=12
25
25
  Requires-Dist: rfc8785<0.2,>=0.1.4
26
26
  Requires-Dist: tomli<3,>=2; python_version < "3.11"
27
+ Provides-Extra: visual
28
+ Requires-Dist: Pillow<13,>=10; extra == "visual"
27
29
 
28
30
  # phase-loop-runtime
29
31
 
@@ -588,7 +588,7 @@ The accepted syntax is line-oriented markdown:
588
588
  ## Execution Policy
589
589
  - work-unit defaults: work-unit=`lane_execute`, effort=`medium`, unsupported=`inherit_default`, inherit-default=`true`
590
590
  - execute: executor=`pi`, model=`auto`, effort=`medium`, work-unit=`lane_execute`, reason=`simple bounded lane default`
591
- - repair: executor=`claude`, model=`claude-opus-4-8`, effort=`high`, work-unit=`repair`
591
+ - repair: executor=`claude`, model=`claude-sonnet-5`, effort=`medium`, work-unit=`repair`
592
592
  - SL-2: executor=`gemini`, model=`phase-loop-execute-medium`, effort=`medium`, work-unit=`lane_execute`, unsupported=`fallback`, fallback=`phase-loop-execute-medium`
593
593
  ```
594
594
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "phase-loop-runtime" # PyPI dist name; NOT "agent-harness" (an unrelated third-party PyPI project)
7
- version = "0.7.10"
7
+ version = "0.7.11"
8
8
  description = "Harness-neutral phase-loop orchestration runtime and CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -60,6 +60,17 @@ dependencies = [
60
60
  "tomli>=2,<3; python_version < '3.11'",
61
61
  ]
62
62
 
63
+ [project.optional-dependencies]
64
+ # FAV visual-evidence gate (agent-harness#91, round-3 CR): the runner-side
65
+ # `derive_visual_observation` decodes the referenced image artifact and
66
+ # computes pixel stats FROM THE ACTUAL PIXELS, so self-reported
67
+ # non_black_pixels/pixel_min/pixel_max can never override a real decode.
68
+ # Pillow is imported LAZILY inside the derivation (models.py) -- it is NOT a
69
+ # hard core dependency; an install without the `visual` extra still runs
70
+ # every other command, and the visual-evidence gate itself fails CLOSED
71
+ # (never silently passes on self-reported numbers) when Pillow is absent.
72
+ visual = ["Pillow>=10,<13"]
73
+
63
74
  [project.urls]
64
75
  Homepage = "https://github.com/ViperJuice/agent-harness"
65
76
  Repository = "https://github.com/ViperJuice/agent-harness"
@@ -18,4 +18,4 @@ __all__ = [
18
18
  "state_ops",
19
19
  ]
20
20
 
21
- __version__ = "0.7.10"
21
+ __version__ = "0.7.11"
@@ -588,7 +588,7 @@ The accepted syntax is line-oriented markdown:
588
588
  ## Execution Policy
589
589
  - work-unit defaults: work-unit=`lane_execute`, effort=`medium`, unsupported=`inherit_default`, inherit-default=`true`
590
590
  - execute: executor=`pi`, model=`auto`, effort=`medium`, work-unit=`lane_execute`, reason=`simple bounded lane default`
591
- - repair: executor=`claude`, model=`claude-opus-4-8`, effort=`high`, work-unit=`repair`
591
+ - repair: executor=`claude`, model=`claude-sonnet-5`, effort=`medium`, work-unit=`repair`
592
592
  - SL-2: executor=`gemini`, model=`phase-loop-execute-medium`, effort=`medium`, work-unit=`lane_execute`, unsupported=`fallback`, fallback=`phase-loop-execute-medium`
593
593
  ```
594
594
 
@@ -1862,6 +1862,24 @@ These fields are the shared child-exit reduction contract. Adapters may add
1862
1862
  transport-specific metadata elsewhere, but they must not rename or omit these
1863
1863
  summary fields.
1864
1864
 
1865
+ The following visual-avatar-evidence fields (FAV, issue #91) are OPTIONAL — they
1866
+ are emitted only when the native closeout carried them (an avatar/browser-media
1867
+ phase that attached runner-owned visual evidence or a typed opt-out). Ordinary
1868
+ phases omit them entirely, but when present they are part of the reduction
1869
+ contract the closeout validator inspects, so they must not be silently dropped:
1870
+
1871
+ - `visual_evidence_path`
1872
+ - `visual_evidence_observed`
1873
+ - `visual_evidence_opt_out`
1874
+
1875
+ `visual_render_declared` (FAV, issue #272) is likewise OPTIONAL and emitted
1876
+ only when carried by the native closeout. It is the DECLARED signal: the
1877
+ visual-evidence gate's BLOCK decision reads this bool (plus evidence
1878
+ validity once declared) and NOTHING else -- an owned avatar/browser-media
1879
+ surface or an explicit visible-render claim in the plan text never blocks on
1880
+ their own; they only raise a non-blocking `visual_render_undeclared_surface`
1881
+ advisory when the phase never declared.
1882
+
1865
1883
  ## Monitor Payloads
1866
1884
 
1867
1885
  `build_notification_payload(...)` must emit exactly these top-level fields:
@@ -0,0 +1,72 @@
1
+ # Verification Evidence Contract
2
+
3
+ VC freezes the additive verification evidence artifact for future runner wiring. Until a later phase consumes it, the only producer is `phase_loop_runtime.verification_evidence.run_verification`.
4
+
5
+ `run_verification(repo, run_dir, commands, suite_command, env_refresh, timeout_s, operational_exemptions=None, python_pin=None, phase_alias=None) -> VerificationResult` writes two sibling files under the supplied run directory. The optional `phase_alias` is the LIVE run alias (ah#85). `verification.json`'s `phase_alias` resolves in strict precedence order: the operator env override (`PHASE_LOOP_PHASE_ALIAS` / `PHASE_ALIAS`) wins if set, else the supplied `phase_alias` (the live run alias) if provided, else `.phase-loop/state.json:current_phase`, else `"unknown"`. Threading the live alias on the execute path keeps the artifact from mis-attributing the phase after a mid-run roadmap amendment changes `current_phase`; the env override remains the highest-priority operator escape-hatch.
6
+
7
+ - `verification.json`
8
+ - `verification.log`
9
+
10
+ `verification.json` uses schema version 2 and contains exactly these top-level fields:
11
+
12
+ - `schema_version`
13
+ - `run_id`
14
+ - `phase_alias`
15
+ - `commands`
16
+ - `env_refresh`
17
+ - `suite`
18
+ - `started_at`
19
+ - `finished_at`
20
+ - `log_sha256`
21
+
22
+ Each `commands[]` item contains `argv`, `cwd`, `exit_code`, `duration_s`, and `log_offset`. `env_refresh`, when present, contains `triggered`, `manifests`, `install_argv`, and `exit_code`. `suite`, when present, contains `argv`, `exit_code`, and `duration_s`.
23
+
24
+ **Schema v2 (agent-harness#209), additive.** Every stage (`commands[]`, `env_refresh`, `suite`) may additionally carry `log_end_offset` (the exclusive byte end of that stage's output in `verification.log`) and `failure_kind` (the runner-OBSERVED failure origin, one of `timeout` / `error` / `nonzero_exit`), and `env_refresh`/`suite` additionally carry their own `log_offset` (start). These fields are captured at execution time and omitted when null; `failure_kind` is never re-derived from `exit_code` downstream (a child that itself returns 124/127 stays `nonzero_exit`, not `timeout`/`error`). **v1 back-compat:** a v1 artifact (without these fields) still loads — the missing fields default to `None`. `load_verification_artifact` accepts `schema_version` in `{1, 2}`.
25
+
26
+ `verification.log` stores raw combined stdout and stderr from the recorded subprocesses, followed (agent-harness#243) by a single trailing seal line `verification-artifact-sha256:<hex>` — a canonical digest of `verification.json` (see the whole-artifact integrity paragraph). `log_offset` is the start byte offset for each stage's output and `log_end_offset` (v2) is its exclusive end (both point strictly before the seal trailer, so a stage's `raw_tail` never includes it). `log_sha256` is the SHA-256 digest of the final log bytes (seal trailer included).
27
+
28
+ **Failure diagnostics (verdict layer, non-frozen).** `validate_verification_artifact` returns `VerificationArtifactValidation`; its `to_json()` includes a `diagnostics` list. On the `nonzero_exit` verdict (where the log is already sha-authenticated), it carries one entry per failing stage — in declared order `commands` → `env_refresh` → `suite` — each `{role, index, argv, exit_code, failure_kind, raw_tail, truncated, diagnostic_status}`. `raw_tail` is a bounded (`DIAGNOSTIC_TAIL_BYTES`) tail sliced from the stage's exact `[log_offset, log_end_offset)` region; `diagnostic_status` is `missing_output` when a failing stage produced no captured bytes (still emitted, with typed context — a failed verdict is never diagnostic-empty). Diagnostics are NOT built on the `log_sha256_mismatch` / `missing_log` integrity branches (an unauthenticated log's tail could be forged); those block on the integrity failure, which is the more severe reason.
29
+
30
+ **Diagnostic offset-integrity (threat model).** Each failing stage's `raw_tail` is sliced from its recorded `[log_offset, log_end_offset)` region, validated fail-closed against its execution-order neighbours' recorded offsets (`prev.log_end_offset <= log_offset <= log_end_offset <= next.log_offset`, bounded by `[0, len(log)]`); any violation yields an empty tail, never a slice into an adjacent stage. This makes a **single-field** offset tamper (which produces an inconsistent chain) fail closed. This neighbour-bounds check is the offset-integrity guard for an **unsealed** artifact (see below); on a **sealed** artifact it remains in place as defense-in-depth, but the whole-artifact seal (which covers offsets — see next paragraph) now catches offset tampers first, including a **coordinated** multi-field tamper across two stages that stays internally consistent with the neighbour-bounds check (e.g. extending one stage's `log_end_offset` and moving the next stage's `log_offset` to the same value).
31
+
32
+ **Whole-artifact integrity (agent-harness#243).** Beyond the per-stage offset table (which `log_sha256` does not cover), the ENTIRE `verification.json` is sealed. At write time a canonical digest of the artifact payload — **all fields except the derived `log_sha256`**, including the per-stage `log_offset`/`log_end_offset` fields — is embedded as the `verification-artifact-sha256:<hex>` trailer line in `verification.log`, and then `log_sha256` is computed over the whole log — so the log's SHA also seals the artifact digest. At validate time, the digest is recomputed from `verification.json` and compared to the sealed trailer BEFORE the pass/fail branch (after `log_sha256_mismatch` / the load-time malformed/oversized guards, so the log is already authenticated) — a FAILING artifact is seal-protected too, not just a would-be-PASS one. A mismatch yields `artifact_seal_mismatch` and fails closed. This catches a **multi-field / structural** edit the per-stage checks miss — most importantly a verdict-flipping edit such as deleting a failed `commands[]` entry to forge a pass, and (since offsets are covered) a coordinated per-stage offset tamper that would otherwise pass the neighbour-bounds check. The seal is keyless (an editor who can rewrite the artifact, the log trailer, AND recompute `log_sha256` can still re-seal — the same trust level #209 assumed), so this raises the bar to a coordinated multi-file edit rather than being cryptographically unforgeable; it is defense-in-depth. **Back-compat / sealed-vs-unsealed split:** an artifact whose log carries no seal trailer (a v1/older run, or an externally-built log) skips the seal check entirely and still validates — for that unsealed case, the per-stage neighbour-bounds check above remains the sole offset-integrity guard, exactly as under #209. Separately, an artifact larger than `MAX_ARTIFACT_BYTES` is rejected `oversized_artifact` before it is parsed.
33
+
34
+ **Redaction posture (agent-harness#243, agent-harness#266).** `raw_tail` is a bounded excerpt of `verification.log` bytes surfaced into every PERSISTED copy of a validation payload — the real egress widening this redaction narrows (the `DIAGNOSTIC_TAIL_BYTES` cap bounds record size, not disclosure — a secret is tiny). A prior round redacted only the rebuilt closeout record, on the premise that the other persisted copies (`launch.json`, the `child_automation` copy, the `events.jsonl` ledger event, the hotfix `artifact_validation`) were local-artifact-trust-class and not read into any prompt/egress path. That premise was FALSE and is corrected here: `phase-loop state --json` / `inspect_state()` reads the entire `launch.json` back out verbatim as `latest_launch_metadata`, and the harness SKILL directs agents to run `state --json` for exact state; the repair prompt separately directs an agent to inspect `events.jsonl` directly. Both are deterministic egress paths for whatever `runner_verification`/`artifact_validation` carries.
35
+
36
+ Redaction is therefore now applied **at the SOURCE** — the single point each of these code paths first captures a `VerificationArtifactValidation.to_json()` payload into something that will be persisted (`redaction.apply_diagnostics_redaction`, a thin SSOT wrapper around `redact_diagnostics_metadata_only`) — rather than only in the closeout record after the fact. Any diagnostic whose fields carry a secret/PII-shaped value (detected with the same `_FORBIDDEN_METADATA_PATTERNS` the closeout malformed-metadata gate enforces) is redacted to METADATA-ONLY: `raw_tail` and `argv` are dropped, leaving role/index/exit_code/failure_kind/truncated plus byte/arg counts, a `redacted` flag, and a `redaction_reason`. Because redaction happens at the source, every downstream persisted copy inherits the redacted form: the closeout record, `launch.json` (and therefore `state --json` / `inspect_state()`), the `child_automation` copy, the `events.jsonl` ledger event (including the `reconcile --verification-log` manual-repair event), and the hotfix `artifact_validation` (both the ledger event and the printed CLI payload). The on-disk `verification.log` is left FULL — it is the intentional local source of truth and is never redacted; only these persisted, potentially-re-read copies are narrowed. `PHASE_LOOP_VERIFY_REDACT_DIAGNOSTICS=all` forces full `raw_tail`/`argv` suppression on every diagnostic across all of these source-redacted copies.
37
+
38
+ **Whole-summary redaction (agent-harness#243 CR recheck of #266).** The above closed the nested `diagnostics` list, but a cross-vendor CR recheck (codex) found a SIBLING field persisted right beside it still carried the identical secret unredacted: `runner._run_execute_verification`'s persisted summary (`runner_verification`, and therefore `launch.json` / `state --json` / `child_automation` / the ledger event) sets `suite_command` to the raw resolved suite argv — for a FAILING suite, the exact secret-bearing command that produced the now-redacted diagnostic. `apply_diagnostics_redaction` therefore now walks the WHOLE payload it is given, not just a top-level `diagnostics` key: it recurses into every nested dict/list-of-dicts, redacting a `diagnostics` list at ANY depth as above, and separately checks every OTHER field whose name looks command/argv-shaped (a narrow heuristic — `command`, `argv`, or `cmd` as a substring, e.g. `suite_command`, `install_argv`) against the same `_FORBIDDEN_METADATA_PATTERNS` matcher; a match replaces the whole field value with a `"<redacted:<field>>"` placeholder (a command argv has no safe partial-redaction shape, unlike a diagnostic's structured metadata). A non-secret `suite_command` passes through unchanged. The heuristic is deliberately name-scoped rather than a blanket scan of every field, so it never touches legitimate absolute path fields (`artifact_path`, `verification_artifact_path`, `verification_log_path`) that would otherwise spuriously match the `absolute_private_path` pattern under a checkout rooted at `/home/<user>/...`.
39
+
40
+ **Redaction is best-effort, not a guarantee (agent-harness#243).** The scrub is a single shared, pattern-based matcher (`_FORBIDDEN_METADATA_PATTERNS`'s `secret_like_value` entry) over `keyword=value`-shaped text, where `keyword` is one of `api_key` / `secret` / `token` / `password` (case-insensitive) and `value` is a 12+ character alphanumeric run. It recognizes that shape across the common quoting/escaping forms a captured command or log line actually takes — plain (`key=value`), single- or double-quoted (`key='value'` / `key="value"`), backslash-escaped (`key: \"value\"`, from shell/JSON re-quoting), and JSON (`"key":"value"`) — applied at the SOURCE across every persisted egress copy (closeout, `launch.json` / `state --json`, `child_automation`, the ledger event, hotfix `artifact_validation`), while `verification.log` itself is left FULL and unredacted. Coverage also extends to a STRUCTURED argv list: a pre-split `["--token", "<value>"]` pair (e.g. inside a diagnostic's `argv`) is joined into a synthesized `flag=value` composite and matched the same way, because the flag and value are already separate structured elements there — no prose ambiguity to resolve.
41
+
42
+ It is explicitly **not** a guarantee against arbitrary secret encodings: a value that is base64-encoded, otherwise obfuscated, split across separate fields with no adjacent keyword, or paired with a keyword this pattern does not enumerate, will NOT be recognized and will pass through unredacted. Closing those cases is out of scope for a pattern matcher and remains the operator's responsibility (e.g. via `PHASE_LOOP_VERIFY_REDACT_DIAGNOSTICS=all` to force full suppression regardless of pattern match, or by not letting a verification command emit a secret in the first place).
43
+
44
+ **Command-context-scoped flag-aware redaction (agent-harness#269, follow-up to #243, cross-vendor CR).** A space-separated CLI flag embedded in a command STRING — e.g. `"curl --token <value>"`, as `discovery.py` stores an `operational_exemptions[].command` — was previously undetected, and an earlier round documented that as a *permanent* limit: a `--token AKIA...SECRET` string and an ordinary sentence like `"Document the --token configuration behavior."` are both, character-for-character, `-{1,2}keyword` + whitespace + a 12+ character alphanumeric run, so a pattern applied to *every* leaf (including free-text closeout prose) genuinely cannot tell a high-entropy secret from a benign following word using that shape alone — a dash-anchored pattern that tried to close the gap by widening the shared, prose-facing matcher was tried and reverted for exactly that reason (it reintroduced a FATAL false positive on `metadata_redaction_diagnostic`, blocking a legitimate closeout `blocker_summary`/`next_action`/finding that merely mentioned a flag name in prose). A later cross-vendor CR round showed the "inherent" framing was wrong: the ambiguity is inherent to *prose*, not to a command STRING. A field already identified by name as command-context (`suite_command`, `operational_exemptions[].command`, an `argv` element — the same `_looks_like_command_field` heuristic the whole-summary redaction above uses) can never legitimately hold prose; its value IS a command, so `--flag VALUE` there is unambiguously a flag+value pair, never a sentence. A separate flag-aware matcher is therefore applied **only** to command-context field values, in addition to the existing strict `[:=]`-assignment matcher: it recognizes long flags (`--token VALUE`), short flags (`-t VALUE`), `=`-separated (`--token=VALUE`), and quoted flags/values (`'--token' 'VALUE'`, `"--token" "VALUE"`), with whitespace or `=` as the separator. This matcher is **never** added to the generic leaf matcher (`_forbidden_metadata_kind`) that backs prose fields or the fatal `metadata_redaction_diagnostic` gate — those stay permanently prose-safe, matching only the strict `[:=]`-assignment shape, so `"Document the --token configuration behavior."` in a `blocker_summary`/`next_action` is never false-flagged. `verification.log` (local, full, never redacted) remains the debugging source of truth regardless. The genuinely remaining out-of-scope case — base64/obfuscated/split-across-fields encodings a name-and-shape matcher cannot enumerate — is unchanged; see the paragraph above.
45
+
46
+ The JSON artifact is written atomically by creating a same-directory temporary file and replacing `verification.json`. Re-running identical command inputs rewrites the same artifact shape and log content, except for timestamps and durations.
47
+
48
+ Command failures, missing executables, and timeouts are evidence data. They are represented by nonzero `exit_code` values and do not make `run_verification` raise. Programmer errors, such as a missing repo or a run directory outside the repo, raise before evidence is written.
49
+
50
+ The plan-time validator API is `validate_verification_commands(repo, commands) -> list[ValidationFinding]`. It is read-only and returns structured findings for empty argv, unresolved `argv[0]`, explicit repo-relative path references that do not exist, and cwd/path references that resolve outside the repo.
51
+
52
+ `load_verification_artifact(path)` validates the persisted artifact and returns `VerificationResult`.
53
+
54
+ Evidence marked `evidence: operational` can be recorded for operator inspection, but it cannot mark runner-executed verification as passed. A later runner phase must still reduce actual command exit data before claiming verification success.
55
+
56
+ ## Hotfix Consumers
57
+
58
+ `phase-loop hotfix --init-stub <path>` writes a minimal stub with `objective`
59
+ and `verification_command` fields without creating a run directory.
60
+
61
+ `phase-loop hotfix --reason <text> --plan <stub-path>` is an emergency
62
+ consumer of the same IF-0-VC-1 evidence path. It creates
63
+ `.phase-loop/runs/<ts>-hotfix-<slug>/`, runs dependency-manifest env refresh,
64
+ the stub verification command, and the effective suite command through
65
+ `run_verification`, then validates the resulting artifact before ledger
66
+ closeout. A passed hotfix event must include `work_unit: hotfix`, the redacted
67
+ reason, plan stub, `verification_artifact_path`, `verification_log_path`, and
68
+ the artifact validation summary. A missing, malformed, tampered, or nonzero
69
+ artifact blocks the hotfix closeout instead of reporting `passed`.
70
+
71
+ Use hotfix for a single bounded change with no interface freeze. Anything that
72
+ changes interfaces, roadmap scope, or downstream work uses a roadmap phase.
@@ -28,8 +28,9 @@ equivalence is proven by a test (not asserted in prose).
28
28
  the **agy/gemini leg where effort is embedded in the model-name string**
29
29
  (`render_gemini_model`, panel_invoker.py:1016). Built-3 lanes are concrete;
30
30
  breadth lanes raise `EffortMappingError` until ABDREG/ABDHOME/ABDOMNI.
31
- Round-trip (proven): claude→`--effort max` (:324), codex→
32
- `-c model_reasoning_effort=xhigh` (:992), gemini→`"Gemini 3.1 Pro (High)"` (:1016).
31
+ Round-trip (proven): claude→`--effort max`, codex→
32
+ `-c model_reasoning_effort=xhigh`, Gemini Flash→`gemini-3.6-flash-high`;
33
+ explicit legacy Pro display names remain compatible.
33
34
  - **Seat identity for result re-keying** — `Seat.seat_key` is a stable LABEL over
34
35
  every distinguishing field (lane, model, effort, lens), so lens-only-different
35
36
  seats get distinct keys. It is not a guaranteed-unique id — a board may hold two
@@ -74,18 +75,23 @@ equivalence is proven by a test (not asserted in prose).
74
75
  API-key var; an api-key seat (only behind the board opt-in) scrubs everything
75
76
  then injects **only the seat vendor's** key(s). Never silent — an api-key seat
76
77
  without the opt-in raises.
78
+ - **Claude Fable/Opus = subscription TUI only** — the shared scrub additionally
79
+ removes Anthropic tokens, alternate base URLs, credential-helper inputs, and
80
+ Bedrock/Vertex/Foundry/Mantle/AWS-provider selectors. Run-isolated settings
81
+ disable `apiKeyHelper`; `claude auth status --json` must prove first-party
82
+ `claude.ai` subscription auth before the exact-model self-PTY launch. The
83
+ homebrew backing is mandatory; alternate backings fail before gateway access.
84
+ API-key fallback and native Task/subagent fulfillment are forbidden.
77
85
  - **`VENDOR_API_KEY_VARS`** — the flat `_API_KEY_VARS` tuple re-keyed by vendor
78
86
  family; its union equals today's tuple (proven), so scrubbing stays
79
87
  byte-equivalent.
80
88
 
81
89
  ## IF-0-ABDFREEZE-4 — Back-compat contract · `fixtures.py` + `tests/test_advisor_board_backcompat.py`
82
90
 
83
- - The `default` board (`DEFAULT_BOARD`) resolves to today's three seats in
84
- `PANEL_LEGS` order, and each seat renders to today's exact model string + effort
85
- args (cross-checked against `panel_invoker.DEFAULT_LEG_MODELS` and the
86
- codex/claude/agy arg forms). Full assertions (launch order, payloads, env/auth,
87
- timeout/retry, result keys, output formatting, failure semantics, `invoke_panel`
88
- API) land in ABDVERIFY; this ships the **scaffold + the default-board fixture**.
91
+ - The model-first `default` board (`DEFAULT_BOARD`) resolves four vendors in
92
+ `DEFAULT_BOARD_VENDOR_ORDER`: Codex/Sol, Gemini/Flash high, Claude/Fable, and
93
+ Grok 4.5. The separate legacy `PANEL_LEGS` tuple and explicit `invoke_panel`
94
+ API remain the frozen three-leg Codex/Gemini/Claude boundary.
89
95
  - `advisor-panel` stays a working alias of `advisor-board` — the rename + alias is
90
96
  ABDRESOLVE; this contract only *states* the invariant.
91
97
  - **Behavior-neutrality proof:** `git diff` on `panel_invoker.py` is empty and the
@@ -179,9 +185,9 @@ the real matrix at `load_boards()` time (`tests/test_advisor_board_config.py`,
179
185
  implementer stays Sonnet. The `default` board (`fixtures.DEFAULT_BOARD`) is
180
186
  byte-pinned to this Fable `invoke_panel` panel by the golden proof
181
187
  (`tests/test_advisor_board_golden.py`); the sole sanctioned delta stays `seat_key`.
182
- - **`code-review` = three frontier vendors, always.** codex `gpt-5.6-sol`,
183
- `Gemini 3.1 Pro`, and `claude-fable-5`, each on the `adversarial` lens (supersedes
184
- the prior two-seat codex+sonnet composition).
188
+ - **`default` and `code-review` are four-vendor frontier boards.** Gemini uses
189
+ `gemini-3.6-flash` at its `high` ceiling alongside Sol, Fable, and Grok 4.5;
190
+ `code-review` preserves availability-aware backfill and distinct lenses.
185
191
  - **Divergent-thinking boards keep Sonnet.** `brainstorm` / `doc-edit` /
186
192
  `legal-brainstorm` deliberately retain `claude-sonnet-5` — a diverse voice, a
187
193
  low-stakes copyedit, a cheap aggressive ideation seat — where it is the right tool.
@@ -190,7 +196,7 @@ the real matrix at `load_boards()` time (`tests/test_advisor_board_config.py`,
190
196
  (`schema.py`), so the legal lenses/purposes need no enum extension.
191
197
  - **Catch-alls for unmodeled tasks (`general`, `solo`).** So the board library is not
192
198
  limited to the pre-modeled domains: `general` is the domain-agnostic top-tier PANEL
193
- (three frontier vendors — gpt-5.6-sol/adversarial, Gemini 3.1 Pro/alternative,
199
+ (three frontier vendors — gpt-5.6-sol/adversarial, gemini-3.6-flash/alternative,
194
200
  claude-fable-5/completeness — hand it any task + brief), and `solo` is the
195
201
  single-MEMBER form (one `claude-fable-5` seat) for a quick top-end opinion when a
196
202
  panel is overkill. A ONE-seat board validates + resolves through `invoke_board` like
@@ -200,7 +206,7 @@ the real matrix at `load_boards()` time (`tests/test_advisor_board_config.py`,
200
206
  (`adversarial`/`alternative`/`completeness`) and purpose (`general`) are free-form
201
207
  strings, so no enum extension.
202
208
  - **Deep-seat FOLLOW-ON (documented, NOT built here).** The richer legal treatment —
203
- four lenses per seat, an apex-Opus (`claude-opus-4-8`) seat, a verify-round, and
209
+ four lenses per seat, an apex-Opus (`claude-opus-5`) seat, a verify-round, and
204
210
  retrieval-grounded citation-verification — is a deliberate follow-on. The current
205
211
  legal boards ship the single-primary-lens-per-seat form; the deep-seat form layers
206
212
  onto the same seat/board schema (no schema change) when built.
@@ -26,6 +26,7 @@ and the ``LedgerWriter`` cross-language transport seam. This is the one place th
26
26
  package touches ``panel_invoker`` — an OPT-IN ``sink=`` on ``invoke_board``;
27
27
  ``sink=None`` stays byte-neutral.
28
28
  """
29
+
29
30
  from __future__ import annotations
30
31
 
31
32
  from .schema import (
@@ -37,8 +38,14 @@ from .schema import (
37
38
  CONFIG_RELATIVE_PATH,
38
39
  EFFORT_LEVELS,
39
40
  PROVIDER_BACKINGS,
41
+ SCOPED_RESEARCH_CAPABILITY,
42
+ SCOPED_RESEARCH_GATEWAY_TOOLS,
43
+ SCOPED_RESEARCH_PMCP_VERSION,
44
+ SCOPED_RESEARCH_SERVERS,
45
+ SCOPED_RESEARCH_TOOL_PATTERNS,
40
46
  Board,
41
47
  HostContext,
48
+ ResearchPolicy,
42
49
  Seat,
43
50
  board_config_path,
44
51
  identify_host_leg,
@@ -101,10 +108,12 @@ from .config import (
101
108
  load_boards,
102
109
  )
103
110
  from .backing import (
111
+ CLAUDE_SUBSCRIPTION_BLOCKED_ENV_VARS,
104
112
  VENDOR_API_KEY_VARS,
105
113
  BackingDecision,
106
114
  all_vendor_key_vars,
107
115
  resolve_seat_env,
116
+ scrub_subscription_env,
108
117
  select_backing,
109
118
  )
110
119
  from .backing_omnigent import (
@@ -127,6 +136,25 @@ from .events import (
127
136
  NullSink,
128
137
  best_effort_forward,
129
138
  )
139
+ from .research import (
140
+ MCP_SERVER_NAME,
141
+ RESEARCH_CAPABLE_LANES,
142
+ ResearchAuditError,
143
+ ResearchInvocation,
144
+ ResearchLedger,
145
+ ResearchRunConfig,
146
+ ResearchSeatConfig,
147
+ ResearchUnavailable,
148
+ claude_mcp_config,
149
+ codex_mcp_args,
150
+ materialize_research_run,
151
+ mcp_tool_names,
152
+ probe_research_capability,
153
+ reduce_research_audit,
154
+ research_instructions,
155
+ scrub_research_env,
156
+ unavailable_ledger,
157
+ )
130
158
  from .observability import (
131
159
  LEDGER_RECORD_KIND,
132
160
  LEDGER_RECORD_SCHEMA,
@@ -149,6 +177,7 @@ from .fixtures import (
149
177
  CANONICAL_LEG_ORDER,
150
178
  CANONICAL_VALID_PAIRS,
151
179
  DEFAULT_BOARD,
180
+ DEFAULT_BOARD_VENDOR_ORDER,
152
181
  DEFAULT_SEAT_EFFORT_ARGS,
153
182
  DEFAULT_SEAT_RENDERED_MODEL,
154
183
  DEFAULT_SEATS,
@@ -178,6 +207,7 @@ __all__ = [
178
207
  "Seat",
179
208
  "Board",
180
209
  "HostContext",
210
+ "ResearchPolicy",
181
211
  "EFFORT_LEVELS",
182
212
  "AUTH_LANES",
183
213
  "AUTH_SUBSCRIPTION",
@@ -186,6 +216,11 @@ __all__ = [
186
216
  "BACKING_HOMEBREW",
187
217
  "BACKING_OMNIGENT",
188
218
  "CONFIG_RELATIVE_PATH",
219
+ "SCOPED_RESEARCH_CAPABILITY",
220
+ "SCOPED_RESEARCH_PMCP_VERSION",
221
+ "SCOPED_RESEARCH_SERVERS",
222
+ "SCOPED_RESEARCH_GATEWAY_TOOLS",
223
+ "SCOPED_RESEARCH_TOOL_PATTERNS",
189
224
  "board_config_path",
190
225
  "identify_host_leg",
191
226
  "seat_vendor_family",
@@ -241,7 +276,9 @@ __all__ = [
241
276
  "load_boards",
242
277
  # backing + auth
243
278
  "VENDOR_API_KEY_VARS",
279
+ "CLAUDE_SUBSCRIPTION_BLOCKED_ENV_VARS",
244
280
  "all_vendor_key_vars",
281
+ "scrub_subscription_env",
245
282
  "BackingDecision",
246
283
  "select_backing",
247
284
  "resolve_seat_env",
@@ -256,6 +293,24 @@ __all__ = [
256
293
  "OmnigentGatewayUnavailable",
257
294
  "SeatRunOutcome",
258
295
  "classify_http_failure",
296
+ # governed PMCP research
297
+ "MCP_SERVER_NAME",
298
+ "RESEARCH_CAPABLE_LANES",
299
+ "ResearchUnavailable",
300
+ "ResearchAuditError",
301
+ "ResearchSeatConfig",
302
+ "ResearchRunConfig",
303
+ "ResearchInvocation",
304
+ "ResearchLedger",
305
+ "probe_research_capability",
306
+ "materialize_research_run",
307
+ "research_instructions",
308
+ "claude_mcp_config",
309
+ "codex_mcp_args",
310
+ "mcp_tool_names",
311
+ "scrub_research_env",
312
+ "reduce_research_audit",
313
+ "unavailable_ledger",
259
314
  # events
260
315
  "AdvisorBoardEvent",
261
316
  "EventSink",
@@ -281,6 +336,7 @@ __all__ = [
281
336
  "BoardObserver",
282
337
  # fixtures
283
338
  "DEFAULT_BOARD",
339
+ "DEFAULT_BOARD_VENDOR_ORDER",
284
340
  "DEFAULT_SEATS",
285
341
  "DEFAULT_SEAT_RENDERED_MODEL",
286
342
  "DEFAULT_SEAT_EFFORT_ARGS",
@@ -48,6 +48,38 @@ VENDOR_API_KEY_VARS: dict[str, tuple[str, ...]] = {
48
48
  "gemini": ("GEMINI_API_KEY", "GOOGLE_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"),
49
49
  }
50
50
 
51
+ # Credentials and routing selectors that can move a Claude Code process away
52
+ # from the first-party Claude.ai subscription lane. This is deliberately
53
+ # broader than ``VENDOR_API_KEY_VARS``: the latter remains the frozen cross-
54
+ # vendor API-key map, while this set also covers helpers, gateways, and cloud
55
+ # providers that Claude Code gives precedence over subscription OAuth.
56
+ CLAUDE_SUBSCRIPTION_BLOCKED_ENV_VARS: tuple[str, ...] = (
57
+ "ANTHROPIC_API_KEY",
58
+ "ANTHROPIC_AUTH_TOKEN",
59
+ "ANTHROPIC_BASE_URL",
60
+ "ANTHROPIC_CUSTOM_HEADERS",
61
+ "ANTHROPIC_BEDROCK_BASE_URL",
62
+ "ANTHROPIC_BEDROCK_MANTLE_BASE_URL",
63
+ "ANTHROPIC_VERTEX_BASE_URL",
64
+ "ANTHROPIC_VERTEX_PROJECT_ID",
65
+ "ANTHROPIC_FOUNDRY_API_KEY",
66
+ "ANTHROPIC_FOUNDRY_BASE_URL",
67
+ "ANTHROPIC_FOUNDRY_RESOURCE",
68
+ "ANTHROPIC_AWS_BASE_URL",
69
+ "ANTHROPIC_AWS_WORKSPACE_ID",
70
+ "AWS_BEARER_TOKEN_BEDROCK",
71
+ "CLAUDE_CODE_API_KEY_HELPER_TTL_MS",
72
+ "CLAUDE_CODE_USE_ANTHROPIC_AWS",
73
+ "CLAUDE_CODE_USE_BEDROCK",
74
+ "CLAUDE_CODE_USE_FOUNDRY",
75
+ "CLAUDE_CODE_USE_MANTLE",
76
+ "CLAUDE_CODE_USE_VERTEX",
77
+ "CLAUDE_CODE_SKIP_BEDROCK_AUTH",
78
+ "CLAUDE_CODE_SKIP_FOUNDRY_AUTH",
79
+ "CLAUDE_CODE_SKIP_MANTLE_AUTH",
80
+ "CLAUDE_CODE_SKIP_VERTEX_AUTH",
81
+ )
82
+
51
83
 
52
84
  def all_vendor_key_vars() -> tuple[str, ...]:
53
85
  """Every vendor API-key var (scrub set for a subscription seat)."""
@@ -59,6 +91,18 @@ def all_vendor_key_vars() -> tuple[str, ...]:
59
91
  return tuple(seen)
60
92
 
61
93
 
94
+ def scrub_subscription_env(base_env: Mapping[str, str]) -> dict[str, str]:
95
+ """Return a subscription-only child environment.
96
+
97
+ All vendor API keys are removed. Claude-specific credential helpers,
98
+ custom request headers, alternate endpoints, and cloud-provider selectors
99
+ are removed as well so a Claude seat cannot silently escape the first-party
100
+ subscription lane.
101
+ """
102
+ blocked = set(all_vendor_key_vars()) | set(CLAUDE_SUBSCRIPTION_BLOCKED_ENV_VARS)
103
+ return {key: value for key, value in base_env.items() if key not in blocked}
104
+
105
+
62
106
  # --- backing selector -------------------------------------------------------
63
107
 
64
108
 
@@ -107,16 +151,21 @@ def resolve_seat_env(
107
151
  silent key can never slip through. Pure and side-effect-free; ABDHOME wires
108
152
  it into the subprocess/gateway env.
109
153
  """
110
- env = {k: v for k, v in base_env.items() if k not in all_vendor_key_vars()}
154
+ env = scrub_subscription_env(base_env)
111
155
  if seat.auth == AUTH_SUBSCRIPTION:
112
156
  return env
113
157
  if seat.auth == AUTH_API_KEY:
158
+ vendor = seat_vendor_family(seat)
159
+ if vendor == "claude" and seat.model.lower().startswith(("claude-fable-", "claude-opus-")):
160
+ raise ValueError(
161
+ f"seat {seat.seat_key} requires Claude Code TUI subscription auth; "
162
+ "api_key fallback is forbidden"
163
+ )
114
164
  if not allow_api_key_fallback:
115
165
  raise ValueError(
116
166
  f"seat {seat.seat_key} requests the api_key lane but the board did not "
117
167
  "opt in (allow_api_key_fallback=False) — never-silent-key"
118
168
  )
119
- vendor = seat_vendor_family(seat)
120
169
  for var in VENDOR_API_KEY_VARS.get(vendor, ()): # ONLY this vendor's key(s)
121
170
  if var in base_env:
122
171
  env[var] = base_env[var]
@@ -126,7 +175,9 @@ def resolve_seat_env(
126
175
 
127
176
  __all__ = [
128
177
  "VENDOR_API_KEY_VARS",
178
+ "CLAUDE_SUBSCRIPTION_BLOCKED_ENV_VARS",
129
179
  "all_vendor_key_vars",
180
+ "scrub_subscription_env",
130
181
  "BackingDecision",
131
182
  "select_backing",
132
183
  "resolve_seat_env",
@@ -6,7 +6,7 @@ its MAX thinking and each carrying a DISTINCT review lens:
6
6
  grok grok-4.5 max lens=adversarial
7
7
  claude claude-fable-5 max lens=correctness
8
8
  codex gpt-5.6-sol max lens=red-team
9
- gemini Gemini 3.1 Pro high lens=alternative-approach (high == its ceiling)
9
+ gemini Gemini 3.6 Flash high lens=alternative-approach (high == its ceiling)
10
10
 
11
11
  The load-bearing behavior is the **availability-aware fallback**: a panel must
12
12
  NEVER collapse to one or two reviewers just because one or two vendors are down.
@@ -47,7 +47,7 @@ _VENDOR_SEAT: dict[str, dict[str, str]] = {
47
47
  "grok": {"model": "grok-4.5", "harness": "grok", "effort": "max", "lens": "adversarial"},
48
48
  "claude": {"model": "claude-fable-5", "harness": "claude", "effort": "max", "lens": "correctness"},
49
49
  "codex": {"model": "gpt-5.6-sol", "harness": "codex", "effort": "max", "lens": "red-team"},
50
- "gemini": {"model": "Gemini 3.1 Pro", "harness": "gemini", "effort": "high", "lens": "alternative-approach"},
50
+ "gemini": {"model": "gemini-3.6-flash", "harness": "gemini", "effort": "high", "lens": "alternative-approach"},
51
51
  }
52
52
 
53
53
  # Distinct lenses the backfill cycles through (each vendor's primary lens is drawn
@@ -18,12 +18,13 @@ built-in ``presets``. Contract:
18
18
 
19
19
  A missing config file is not an error: the built-in presets load on their own.
20
20
  """
21
+
21
22
  from __future__ import annotations
22
23
 
23
24
  from collections.abc import Mapping
24
25
  from dataclasses import dataclass
25
26
  from pathlib import Path
26
- from typing import Any
27
+ from typing import Any, Callable
27
28
 
28
29
  try: # Python 3.11+
29
30
  import tomllib # type: ignore[import-not-found]
@@ -37,6 +38,7 @@ from .schema import (
37
38
  AUTH_LANES,
38
39
  PROVIDER_BACKINGS,
39
40
  Board,
41
+ ResearchPolicy,
40
42
  Seat,
41
43
  board_config_path,
42
44
  )
@@ -44,7 +46,7 @@ from .schema import (
44
46
  # Recognised keys — anything else is a hard error (no silent drop).
45
47
  _KNOWN_TOP_KEYS: frozenset[str] = frozenset({"default_board", "boards"})
46
48
  _KNOWN_BOARD_KEYS: frozenset[str] = frozenset(
47
- {"name", "purpose", "allow_api_key_fallback", "seats"}
49
+ {"name", "purpose", "allow_api_key_fallback", "research_enabled", "seats"}
48
50
  )
49
51
  _KNOWN_SEAT_KEYS: frozenset[str] = frozenset(
50
52
  {"model", "effort", "harness", "lens", "auth", "backing", "host_leg"}
@@ -114,7 +116,9 @@ def _parse_seat(raw: Mapping[str, Any], where: str) -> Seat:
114
116
  if "model" not in raw:
115
117
  raise BoardConfigError(f"{where} is missing the required 'model' key")
116
118
  if "effort" not in raw:
117
- raise BoardConfigError(f"{where} (model={raw['model']!r}) is missing the required 'effort' key")
119
+ raise BoardConfigError(
120
+ f"{where} (model={raw['model']!r}) is missing the required 'effort' key"
121
+ )
118
122
  auth = raw.get("auth", AUTH_LANES[0])
119
123
  backing = raw.get("backing", PROVIDER_BACKINGS[0])
120
124
  try:
@@ -145,7 +149,8 @@ def _parse_board(raw: Mapping[str, Any], index: int) -> Board:
145
149
  if not isinstance(seats_raw, list):
146
150
  raise BoardConfigError(f"board {name!r} 'seats' must be a list of seat tables")
147
151
  seats = tuple(
148
- _parse_seat(seat, f"board {name!r} seats[{i}]") for i, seat in enumerate(seats_raw)
152
+ _parse_seat(seat, f"board {name!r} seats[{i}]")
153
+ for i, seat in enumerate(seats_raw)
149
154
  )
150
155
  try:
151
156
  return Board(
@@ -155,6 +160,9 @@ def _parse_board(raw: Mapping[str, Any], index: int) -> Board:
155
160
  allow_api_key_fallback=_require_bool(
156
161
  raw, "allow_api_key_fallback", False, where
157
162
  ),
163
+ research_policy=ResearchPolicy(
164
+ enabled=_require_bool(raw, "research_enabled", False, where)
165
+ ),
158
166
  )
159
167
  except (ValueError, TypeError) as exc:
160
168
  # Board.__post_init__ (e.g. api_key seat without opt-in) -> config error.
@@ -203,7 +211,9 @@ def load_boards(
203
211
  # Availability-aware code-review (before the user overlay so a user override wins).
204
212
  compose_probe = is_available
205
213
  if compose_probe is None and matrix is not None:
206
- compose_probe = getattr(getattr(matrix, "harnesses", None), "is_available", None)
214
+ compose_probe = getattr(
215
+ getattr(matrix, "harnesses", None), "is_available", None
216
+ )
207
217
  # #151: the LIVE convening path is auth-aware by DEFAULT — a PATH-present but
208
218
  # unauthenticated vendor is dropped and backfilled. Pass an explicit ``auth_ok``
209
219
  # so the composer never falls through to its is_available-injected pass-through
@@ -211,7 +221,9 @@ def load_boards(
211
221
  # gate short-circuits for vendors that fail the availability probe, so a host
212
222
  # with no vendor CLI never shells out.
213
223
  compose_auth = auth_ok if auth_ok is not None else default_board_auth_ok
214
- composed_review = compose_review_board(is_available=compose_probe, auth_ok=compose_auth)
224
+ composed_review = compose_review_board(
225
+ is_available=compose_probe, auth_ok=compose_auth
226
+ )
215
227
  boards[composed_review.name] = composed_review
216
228
 
217
229
  cfg_path = path if path is not None else board_config_path(env)