phase-loop-runtime 0.2.0__py3-none-any.whl

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 (370) hide show
  1. phase_loop_runtime/__init__.py +20 -0
  2. phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +90 -0
  3. phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +137 -0
  4. phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +510 -0
  5. phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +125 -0
  6. phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +232 -0
  7. phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +247 -0
  8. phase_loop_runtime/_contract_docs/phase-loop/protocol.md +2759 -0
  9. phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +289 -0
  10. phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +47 -0
  11. phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +42 -0
  12. phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +34 -0
  13. phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +29 -0
  14. phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +32 -0
  15. phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +52 -0
  16. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +2 -0
  17. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +16 -0
  18. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +5 -0
  19. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +16 -0
  20. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +2 -0
  21. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +16 -0
  22. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +6 -0
  23. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +16 -0
  24. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +7 -0
  25. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +2 -0
  26. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +16 -0
  27. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +16 -0
  28. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +1 -0
  29. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +1 -0
  30. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +1 -0
  31. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +5 -0
  32. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +16 -0
  33. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +16 -0
  34. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +9 -0
  35. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +10 -0
  36. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +16 -0
  37. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +16 -0
  38. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +4 -0
  39. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +1 -0
  40. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +8 -0
  41. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +16 -0
  42. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +2 -0
  43. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +3 -0
  44. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +16 -0
  45. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +1 -0
  46. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +13 -0
  47. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +16 -0
  48. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +2 -0
  49. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +16 -0
  50. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +9 -0
  51. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +4 -0
  52. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +2 -0
  53. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +16 -0
  54. phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +5 -0
  55. phase_loop_runtime/adoption_bundle.py +273 -0
  56. phase_loop_runtime/advisor_board/CONTRACTS.md +257 -0
  57. phase_loop_runtime/advisor_board/__init__.py +288 -0
  58. phase_loop_runtime/advisor_board/backing.py +137 -0
  59. phase_loop_runtime/advisor_board/backing_omnigent.py +498 -0
  60. phase_loop_runtime/advisor_board/config.py +225 -0
  61. phase_loop_runtime/advisor_board/events.py +115 -0
  62. phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +59 -0
  63. phase_loop_runtime/advisor_board/fixtures.py +91 -0
  64. phase_loop_runtime/advisor_board/harness_mapping.py +125 -0
  65. phase_loop_runtime/advisor_board/matrix.py +146 -0
  66. phase_loop_runtime/advisor_board/observability.py +481 -0
  67. phase_loop_runtime/advisor_board/presets.py +188 -0
  68. phase_loop_runtime/advisor_board/registries.py +309 -0
  69. phase_loop_runtime/advisor_board/resolver.py +253 -0
  70. phase_loop_runtime/advisor_board/schema.py +269 -0
  71. phase_loop_runtime/advisor_board/standin.py +166 -0
  72. phase_loop_runtime/advisor_board/validation.py +159 -0
  73. phase_loop_runtime/agent_runtime_provider.py +676 -0
  74. phase_loop_runtime/baml_modular.py +656 -0
  75. phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +37 -0
  76. phase_loop_runtime/baml_src/dotfiles_c4_document.baml +14 -0
  77. phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +50 -0
  78. phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +16 -0
  79. phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +20 -0
  80. phase_loop_runtime/baml_src/emit_phase_closeout.baml +86 -0
  81. phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +36 -0
  82. phase_loop_runtime/baml_src/verification_evidence.baml +40 -0
  83. phase_loop_runtime/broker.py +181 -0
  84. phase_loop_runtime/build_bundle.py +294 -0
  85. phase_loop_runtime/capability_registry.py +835 -0
  86. phase_loop_runtime/classifier.py +87 -0
  87. phase_loop_runtime/claude_agent_view.py +625 -0
  88. phase_loop_runtime/claude_channel_sidecar.py +1086 -0
  89. phase_loop_runtime/cli.py +2599 -0
  90. phase_loop_runtime/closeout.py +865 -0
  91. phase_loop_runtime/closeout_classifier.py +120 -0
  92. phase_loop_runtime/closeout_evidence_audit.py +112 -0
  93. phase_loop_runtime/closeout_validation.py +144 -0
  94. phase_loop_runtime/closeout_validators.py +203 -0
  95. phase_loop_runtime/consiliency_gates.py +374 -0
  96. phase_loop_runtime/consiliency_ingest.py +399 -0
  97. phase_loop_runtime/consiliency_layout.py +176 -0
  98. phase_loop_runtime/consiliency_scaffold.py +305 -0
  99. phase_loop_runtime/cross_repo_channel.py +331 -0
  100. phase_loop_runtime/discovery.py +2368 -0
  101. phase_loop_runtime/dispatch_lock.py +167 -0
  102. phase_loop_runtime/doc_delta_validator.py +98 -0
  103. phase_loop_runtime/docs_audit.py +285 -0
  104. phase_loop_runtime/docs_freshness.py +468 -0
  105. phase_loop_runtime/docs_surfaces.py +150 -0
  106. phase_loop_runtime/dotfiles_profile_plugin.py +96 -0
  107. phase_loop_runtime/events.py +154 -0
  108. phase_loop_runtime/events_migration.py +96 -0
  109. phase_loop_runtime/evidence_audit.py +1082 -0
  110. phase_loop_runtime/evidence_audit_config.py +172 -0
  111. phase_loop_runtime/fleet_map.py +426 -0
  112. phase_loop_runtime/fleet_metrics.py +298 -0
  113. phase_loop_runtime/fleet_metrics_export.py +196 -0
  114. phase_loop_runtime/git_discipline.py +479 -0
  115. phase_loop_runtime/git_ops.py +122 -0
  116. phase_loop_runtime/git_topology.py +252 -0
  117. phase_loop_runtime/governed_bundle.py +137 -0
  118. phase_loop_runtime/governed_premerge.py +219 -0
  119. phase_loop_runtime/governed_review.py +264 -0
  120. phase_loop_runtime/handoff.py +932 -0
  121. phase_loop_runtime/handoff_path.py +14 -0
  122. phase_loop_runtime/injection.py +740 -0
  123. phase_loop_runtime/install_status.py +88 -0
  124. phase_loop_runtime/lane_scheduler.py +317 -0
  125. phase_loop_runtime/launcher.py +2760 -0
  126. phase_loop_runtime/lease_store.py +553 -0
  127. phase_loop_runtime/maintenance.py +401 -0
  128. phase_loop_runtime/migrate_handoffs.py +201 -0
  129. phase_loop_runtime/models.py +2144 -0
  130. phase_loop_runtime/observability.py +1290 -0
  131. phase_loop_runtime/panel_invoker.py +1638 -0
  132. phase_loop_runtime/phase_loop_drift_audit.py +388 -0
  133. phase_loop_runtime/phase_worktree_executor.py +433 -0
  134. phase_loop_runtime/pipeline_adapter/__init__.py +12 -0
  135. phase_loop_runtime/pipeline_adapter/branch_ops.py +274 -0
  136. phase_loop_runtime/pipeline_adapter/flag.py +55 -0
  137. phase_loop_runtime/pipeline_adapter/markers.py +13 -0
  138. phase_loop_runtime/pipeline_adapter/merge_policy.py +72 -0
  139. phase_loop_runtime/pipeline_adapter/ratification.py +100 -0
  140. phase_loop_runtime/pipeline_adapter/sibling_matcher.py +123 -0
  141. phase_loop_runtime/plan_ir.py +523 -0
  142. phase_loop_runtime/plan_manifest.py +415 -0
  143. phase_loop_runtime/planner_validation.py +176 -0
  144. phase_loop_runtime/profiles.py +462 -0
  145. phase_loop_runtime/prompts.py +365 -0
  146. phase_loop_runtime/provenance.py +165 -0
  147. phase_loop_runtime/publishing.py +339 -0
  148. phase_loop_runtime/py.typed +1 -0
  149. phase_loop_runtime/reconcile.py +1550 -0
  150. phase_loop_runtime/redaction.py +184 -0
  151. phase_loop_runtime/reflection_sync.py +293 -0
  152. phase_loop_runtime/release_guard.py +186 -0
  153. phase_loop_runtime/render.py +432 -0
  154. phase_loop_runtime/repo_validation.py +427 -0
  155. phase_loop_runtime/review_summary.py +150 -0
  156. phase_loop_runtime/roadmap_lint.py +425 -0
  157. phase_loop_runtime/route_log.py +59 -0
  158. phase_loop_runtime/route_policy/__init__.py +11 -0
  159. phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +263 -0
  160. phase_loop_runtime/runner.py +8400 -0
  161. phase_loop_runtime/runtime_paths.py +225 -0
  162. phase_loop_runtime/runtime_projection.py +113 -0
  163. phase_loop_runtime/runtime_resources.py +36 -0
  164. phase_loop_runtime/schema_export.py +292 -0
  165. phase_loop_runtime/schemas/phase_loop_closeout.schema.json +366 -0
  166. phase_loop_runtime/skill_install.py +176 -0
  167. phase_loop_runtime/skill_inventory.py +662 -0
  168. phase_loop_runtime/skill_paths.py +42 -0
  169. phase_loop_runtime/skill_sources_plugin.py +37 -0
  170. phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +1 -0
  171. phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +38 -0
  172. phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +1 -0
  173. phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +38 -0
  174. phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +1 -0
  175. phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +152 -0
  176. phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +1 -0
  177. phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +745 -0
  178. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +33 -0
  179. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +197 -0
  180. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +103 -0
  181. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +125 -0
  182. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +62 -0
  183. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +127 -0
  184. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +51 -0
  185. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +274 -0
  186. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +62 -0
  187. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +32 -0
  188. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +642 -0
  189. phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +96 -0
  190. phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +1 -0
  191. phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +115 -0
  192. phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +1 -0
  193. phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +439 -0
  194. phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +19 -0
  195. phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +111 -0
  196. phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +193 -0
  197. phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +32 -0
  198. phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +1 -0
  199. phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +334 -0
  200. phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +25 -0
  201. phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +1 -0
  202. phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +776 -0
  203. phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +17 -0
  204. phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +1092 -0
  205. phase_loop_runtime/skills_bundle/claude-run-train/README.md +1 -0
  206. phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +75 -0
  207. phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +1 -0
  208. phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +243 -0
  209. phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +72 -0
  210. phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +1 -0
  211. phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +249 -0
  212. phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +79 -0
  213. phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +1 -0
  214. phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +74 -0
  215. phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +103 -0
  216. phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +1 -0
  217. phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +38 -0
  218. phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +1 -0
  219. phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +38 -0
  220. phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +1 -0
  221. phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +154 -0
  222. phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +1 -0
  223. phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +231 -0
  224. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +33 -0
  225. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +197 -0
  226. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +103 -0
  227. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +125 -0
  228. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +62 -0
  229. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +127 -0
  230. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +51 -0
  231. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +274 -0
  232. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +62 -0
  233. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +32 -0
  234. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +642 -0
  235. phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +96 -0
  236. phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +1 -0
  237. phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +248 -0
  238. phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +1 -0
  239. phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +150 -0
  240. phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +19 -0
  241. phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +111 -0
  242. phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +193 -0
  243. phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +32 -0
  244. phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +1 -0
  245. phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +119 -0
  246. phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +25 -0
  247. phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +1 -0
  248. phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +307 -0
  249. phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +17 -0
  250. phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +1092 -0
  251. phase_loop_runtime/skills_bundle/codex-run-train/README.md +1 -0
  252. phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +75 -0
  253. phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +1 -0
  254. phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +94 -0
  255. phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +72 -0
  256. phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +1 -0
  257. phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +114 -0
  258. phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +79 -0
  259. phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +1 -0
  260. phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +102 -0
  261. phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +103 -0
  262. phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +1 -0
  263. phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +38 -0
  264. phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +1 -0
  265. phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +38 -0
  266. phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +1 -0
  267. phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +144 -0
  268. phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +1 -0
  269. phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +198 -0
  270. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +33 -0
  271. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +197 -0
  272. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +103 -0
  273. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +125 -0
  274. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +62 -0
  275. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +127 -0
  276. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +51 -0
  277. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +274 -0
  278. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +62 -0
  279. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +32 -0
  280. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +642 -0
  281. phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +96 -0
  282. phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +1 -0
  283. phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +111 -0
  284. phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +1 -0
  285. phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +147 -0
  286. phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +19 -0
  287. phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +111 -0
  288. phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +193 -0
  289. phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +32 -0
  290. phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +1 -0
  291. phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +119 -0
  292. phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +25 -0
  293. phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +1 -0
  294. phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +217 -0
  295. phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +17 -0
  296. phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +1092 -0
  297. phase_loop_runtime/skills_bundle/gemini-run-train/README.md +1 -0
  298. phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +75 -0
  299. phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +1 -0
  300. phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +87 -0
  301. phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +72 -0
  302. phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +1 -0
  303. phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +109 -0
  304. phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +79 -0
  305. phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +1 -0
  306. phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +98 -0
  307. phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +103 -0
  308. phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +1 -0
  309. phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +38 -0
  310. phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +1 -0
  311. phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +38 -0
  312. phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +1 -0
  313. phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +144 -0
  314. phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +1 -0
  315. phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +196 -0
  316. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +33 -0
  317. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +197 -0
  318. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +103 -0
  319. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +125 -0
  320. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +62 -0
  321. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +127 -0
  322. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +51 -0
  323. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +274 -0
  324. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +62 -0
  325. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +32 -0
  326. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +642 -0
  327. phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +96 -0
  328. phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +1 -0
  329. phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +113 -0
  330. phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +1 -0
  331. phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +147 -0
  332. phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +19 -0
  333. phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +111 -0
  334. phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +193 -0
  335. phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +32 -0
  336. phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +1 -0
  337. phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +119 -0
  338. phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +25 -0
  339. phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +1 -0
  340. phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +211 -0
  341. phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +17 -0
  342. phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +1092 -0
  343. phase_loop_runtime/skills_bundle/opencode-run-train/README.md +1 -0
  344. phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +75 -0
  345. phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +1 -0
  346. phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +87 -0
  347. phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +72 -0
  348. phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +1 -0
  349. phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +109 -0
  350. phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +79 -0
  351. phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +1 -0
  352. phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +98 -0
  353. phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +103 -0
  354. phase_loop_runtime/state.py +156 -0
  355. phase_loop_runtime/state_degradation.py +136 -0
  356. phase_loop_runtime/state_ops.py +676 -0
  357. phase_loop_runtime/train_ledger.py +215 -0
  358. phase_loop_runtime/train_roadmap.py +339 -0
  359. phase_loop_runtime/train_runner.py +1197 -0
  360. phase_loop_runtime/verification_evidence.py +650 -0
  361. phase_loop_runtime/verification_evidence_validator.py +75 -0
  362. phase_loop_runtime/visual_evidence_validator.py +36 -0
  363. phase_loop_runtime/worker_pool.py +123 -0
  364. phase_loop_runtime/worktree_index.py +270 -0
  365. phase_loop_runtime-0.2.0.data/data/share/phase-loop-runtime/protocol/protocol.md +2475 -0
  366. phase_loop_runtime-0.2.0.dist-info/METADATA +106 -0
  367. phase_loop_runtime-0.2.0.dist-info/RECORD +370 -0
  368. phase_loop_runtime-0.2.0.dist-info/WHEEL +5 -0
  369. phase_loop_runtime-0.2.0.dist-info/entry_points.txt +9 -0
  370. phase_loop_runtime-0.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,510 @@
1
+ # Phase-Loop Harness Capability Matrix
2
+
3
+ PROMOTE finalizes the operator-facing maturity story for Codex, Claude Code /
4
+ ThawedCode, Gemini CLI, OpenCode, Pi Agent, and the generic command adapter as of
5
+ 2026-04-27. This matrix now serves as the frozen operator contract that
6
+ follows the v6 live-proof ledger: preserve the earlier probe-backed notes,
7
+ compare each harness against the same lifecycle fields, and keep registry
8
+ promotion claims separate from operator-facing maturity labels so public docs
9
+ do not imply broader autonomous support than the disposable live proof actually
10
+ established. Authenticated disposable live proof remains opt-in through
11
+ `scripts/smoke-phase-loop-live-adapters`, while cheap checks and offline smoke
12
+ stay the default verification path. The v6 proof ledger lives at
13
+ `docs/phase-loop/claude-code-v6-live-proof.md`.
14
+
15
+ ## Maturity Labels
16
+
17
+ | Surface | Maturity | Operator note |
18
+ | --- | --- | --- |
19
+ | Codex | Live-supported | Full disposable live proof is supported, but active Codex-thread runs may intentionally skip the nested Codex live slice; run that proof from a normal shell session. |
20
+ | Claude Code | Proof-blocked | `PROMOTE` keeps autonomous Claude closeout conservative even after `LIVEPROOF` and `CTXBUNDLE`; manual reentry and manual-import closeout remain supported. |
21
+ | Gemini CLI | Live-supported | Shared state and closeout contracts are verified; trust posture remains visible in launch metadata. |
22
+ | OpenCode | Live-supported | Shared state and closeout contracts are verified; permission posture remains explicit in launch metadata. |
23
+ | Pi Agent | Live-supported | Preferred simple-lane child runner using repo-local `phase-loop-pi/**` and `pi-config/**`; no global scheduler, ledger, worktree allocation, or merge-reducer authority. |
24
+ | Generic `command` adapter | Experimental | Opt-in wrapper only, context-file delivery only, and not promoted as a first-class live harness. |
25
+ | ThawedCode-specific automation | Manual-only | Grouped with Claude for docs and manual imports, but not independently proven as a separate autonomous adapter. |
26
+
27
+ ### Claude Support Slices
28
+
29
+ | Claude slice | Maturity | Operator note |
30
+ | --- | --- | --- |
31
+ | `claude_solo` | `proof-blocked` | Default non-interactive Claude launch path. Auth is healthy, but disposable autonomous closeout still lacks a fully green proof run. |
32
+ | `claude_delegated_worker` | `proof-blocked` | Runner-brokered Claude child work stays proof-blocked until the same closeout contract is proven under child execution. |
33
+ | `claude_subagent` | `experimental` | Native subagents are governed and bounded, but remain an internal Claude collaboration mode rather than a promoted cross-harness worker path. |
34
+ | `claude_agent_team` | `experimental` | Native teams stay opt-in, env-gated, and evidence-gated. `PHASE_LOOP_ENABLE_CLAUDE_TEAM_LIVE_TEST` only enables disposable proof, not general promotion. |
35
+
36
+ ## Parity Vocabulary
37
+
38
+ PROFILEDOC adds the v8 default profile story without changing maturity labels:
39
+ roadmap and phase planning are high or xhigh-capable, lane execution and repair
40
+ are medium, and reducer/review/verify work is high. Gemini CLI follows the
41
+ GEMPROBE decision `gemini_cli_config_unverified_but_usable`: normal
42
+ phase-loop use targets built-in Gemini CLI routing aliases (`pro` for
43
+ planning/review, `auto` for execution/repair), while explicit proof runs may
44
+ use run-local user-scope `modelConfigs.customAliases` that carry
45
+ `thinkingConfig.thinkingLevel`. Model provenance and phase-loop metrics stay
46
+ recorded in launch metadata and `.phase-loop/metrics.jsonl`.
47
+
48
+ PARITY freezes two different vocabularies and they must not be conflated:
49
+
50
+ | Contract surface | Frozen labels | Meaning |
51
+ | --- | --- | --- |
52
+ | Operator maturity | `live-supported`, `proof-blocked`, `experimental`, `manual-only` | What the docs may claim operators can trust today. |
53
+ | Registry promotion | `live`, `proof_gated`, `manual_only` | What the shared code may advertise for autonomous selection and promotion logic. |
54
+ | Failure reduction | `adapter_failure`, `phase_failure` | Whether the executor path failed to satisfy the contract or the requested phase work itself failed inside the contract. |
55
+ | Blocker posture | `human_required`, `repairable_non_human` | Whether a real operator action is required or the runner should route back through repair/planning. |
56
+
57
+ For this closeout, Claude stays operator-`proof-blocked` and registry
58
+ `promotion_status=proof_gated`. Within Claude, `claude_solo` and
59
+ `claude_delegated_worker` remain `proof-blocked`, while `claude_subagent` and
60
+ `claude_agent_team` remain operator `experimental` and registry
61
+ `promotion_status=proof_gated`. Gemini CLI and OpenCode remain operator
62
+ `live-supported` with registry `promotion_status=live`. The generic `command`
63
+ adapter stays operator `experimental` and registry `manual_only`.
64
+
65
+ ## Frozen Lifecycle Matrix
66
+
67
+ Every harness comparison below is reduced against the same operator fields:
68
+
69
+ | Lifecycle field | What the row must answer |
70
+ | --- | --- |
71
+ | Launch entrypoint | Non-interactive command shape and required invocation posture |
72
+ | Auth preflight | Metadata-only login or subscription probe and blocker reduction |
73
+ | Prompt / context delivery | Whether workflow context arrives as prompt-only, inline, context-file, or manual delivery |
74
+ | Process lifecycle | Child supervision, timeout posture, and cleanup expectations |
75
+ | Output capture | Durable logs or structured response surfaces available to the runner |
76
+ | Heartbeat / observability | Evidence available while the child is still running |
77
+ | Terminal summary / closeout | Whether the executor reduces back into the shared `automation:` and `terminal-summary.json` contract |
78
+ | Manual reentry | Artifact-led recovery expectations after blocked or incomplete autonomous runs |
79
+
80
+ ## Shared Matrix Fields
81
+
82
+ Each harness section still records the probe-backed details that explain the
83
+ frozen lifecycle claims:
84
+
85
+ | Field | Meaning |
86
+ | --- | --- |
87
+ | Prompt input | How the harness accepts a non-interactive prompt or instruction body |
88
+ | CWD selection | How the harness chooses the working directory or workspace root |
89
+ | Model flags | CLI flags or config surfaces for model selection |
90
+ | Reasoning / effort flags | Explicit reasoning or effort controls when documented or probed |
91
+ | Permission / approval flags | Approval, sandbox, or tool-permission controls |
92
+ | Streaming / log behavior | Structured output, stream output, or log-oriented surfaces |
93
+ | Exit-code semantics | Whether the surfaced contract documents or exposes process return status |
94
+ | Context / skill / instruction injection | Native ways to inject instructions, skills, rules, policies, or prompt files |
95
+ | Installed-skill discovery / install paths | Current documented or repo-local skill discovery and install paths |
96
+
97
+ `CTXDELIV` freezes shared delivery vocabulary for all adapters as
98
+ `prompt_only`, `inline`, `stdin`, `context_file`, and `manual`. When a harness
99
+ uses `context_file`, the runner writes `.codex/phase-loop/runs/<run-id>/context.md`
100
+ beside `launch.json` and records only redacted metadata such as
101
+ `context_path`, `context_sha256`, `expected_skill_pack`,
102
+ `skill_bundle_sha256`, and `fallback_mode`.
103
+
104
+ DFHARNESSPOLICY freezes harness selection defaults: simple bounded
105
+ scheduler-assigned lane execution defaults to Pi Agent, Claude/Anthropic model
106
+ lanes default to Claude Code CLI unless policy explicitly selects a Pi-wrapped
107
+ Claude route with an override reason, and Codex/Gemini fallback routes remain
108
+ CLI-based and reason-coded. `manual` and generic `command` routes stay
109
+ non-default unless selected by operator, roadmap, or phase-plan policy.
110
+
111
+ ## Safe Metadata-Only Auth and Subscription Probes
112
+
113
+ `LIVEBASE` freezes auth preflight as metadata-only probing. Live child launch
114
+ must not depend on API keys for Claude Code, Gemini CLI, or OpenCode; the proof
115
+ bar is an authenticated local CLI or subscription session that can be checked
116
+ without mutating repo state.
117
+
118
+ | Harness | Safe probe contract | Blocker reduction if missing |
119
+ | --- | --- | --- |
120
+ | Claude Code / ThawedCode | `claude --version`, `claude --help`, and metadata-only `claude auth status` to confirm the CLI exists, exposes the documented non-interactive contract, and is logged into a subscription-backed local session. | `account_or_billing_setup` |
121
+ | Gemini CLI | `gemini --version` plus `gemini --help` or another help-only surface to confirm the installed CLI and current approval/output flags. | `account_or_billing_setup` |
122
+ | OpenCode | `opencode --version`, `opencode run --help`, and `opencode agent list` to confirm the installed CLI, scripted surface, and current agent inventory without mutating repo state. | `account_or_billing_setup` |
123
+ | Pi Agent | `pi --version` and `pi --help` to confirm the installed CLI and help surface without reading provider credentials or mutating repo state. | `account_or_billing_setup` |
124
+
125
+ These probes are intentionally metadata-only. Launch metadata may record command
126
+ availability, auth/help-surface presence, selected maturity, blocker class,
127
+ profile source, override reason, fallback applied, and fallback reason. It must
128
+ not record raw command stdout, raw command stderr, secrets, local environment
129
+ values, OAuth material, raw provider payloads, or credential payloads. Later
130
+ live-adapter phases may add stronger disposable proof, but they must not switch
131
+ to API-key execution or quietly broaden auth preflight into a mutating login
132
+ flow.
133
+
134
+ ## Pipeline Bridge Boundary
135
+
136
+ The Pipeline bridge proof is fake and local by default. Governed Pipeline owns
137
+ roadmap-wide orchestration, bundle refresh, closeout ingest, Portal lifecycle
138
+ state, and `pipeline.definition.json`; dotfiles handles one delegated phase and
139
+ preserves the harness lifecycle contract for that phase. Pipeline-aware runs
140
+ may carry `phase-source-bundle.v1` metadata into planning and export
141
+ `phase_loop_closeout.v1` with redacted evidence refs. DFFAKESMOKE records the
142
+ local substrate receipt at `docs/phase-loop/dffakesmoke-substrate-receipt.md`
143
+ and uses `vendor/phase-loop-runtime/tests/fixtures/phase_loop_fake_smoke/matrix.json` to name the fake
144
+ success, failure, default-dispatch, smoke-wrapper, and receipt proof matrix.
145
+ `phase_loop_closeout.v1` after execution, but standalone phase-loop operation
146
+ stays supported without Pipeline metadata or `.pipeline/**` state.
147
+
148
+ Migration triage follows the same boundary: stale protected-source evidence
149
+ routes to Pipeline bundle refresh, while local closeout, dispatch, smoke, or
150
+ runner-contract failures route to dotfiles repair. Authenticated live harness
151
+ smokes continue to require explicit environment gates; the Pipeline bridge
152
+ proof does not make live Pipeline execution a default prerequisite.
153
+
154
+ Skill examples must keep Portal contracts, Portal projection, Greenfield
155
+ authority files, and Greenfield metadata-only authority refs mediated through
156
+ governed-pipeline closeout ingest. They are not direct dotfiles write targets,
157
+ and standalone dotfiles use remains valid without Pipeline metadata. No harness
158
+ may infer writes to `.pipeline/**`, governed-pipeline specs, Portal contracts,
159
+ Greenfield authority files, private evidence, raw data, raw evidence,
160
+ credentials, provider payloads, or legacy `.codex/phase-loop/` state without
161
+ an active plan and source bundle that explicitly own the exact path or glob.
162
+
163
+ DFTRUTHSOAK keeps the same boundary for the final truth soak: standalone
164
+ dotfiles closeout proof, pipeline-required closeout proof, stale-input
165
+ blockers, source-truth advisory hints, bridge fixtures, and downstream mirror
166
+ refs are valid evidence. Portal-facing proof is projection metadata owned by
167
+ governed-pipeline, and Greenfield-facing proof is metadata-only authority refs
168
+ owned by governed-pipeline. Neither surface promotes Portal or Greenfield
169
+ writes from dotfiles.
170
+
171
+ ## Codex
172
+
173
+ Maturity: `live-supported`
174
+
175
+ | Field | Current finding |
176
+ | --- | --- |
177
+ | Prompt input | `codex exec [PROMPT]` accepts a prompt argument; if the prompt is omitted or `-` is used, stdin is read and appended as a `<stdin>` block when both are present. Local probe: `codex exec --help 2>&1 | sed -n '1,220p'`. |
178
+ | CWD selection | `codex exec -C <DIR>` selects the working root, and `--add-dir <DIR>` adds writable directories beside the primary workspace. Local probe: `codex exec --help 2>&1 | sed -n '1,220p'`. |
179
+ | Model flags | `codex exec --model <MODEL>` and `--profile <CONFIG_PROFILE>` are available. Local probe: `codex exec --help 2>&1 | sed -n '1,220p'`. |
180
+ | Reasoning / effort flags | The current local CLI surface does not expose a dedicated `--effort` flag on `codex exec`; the current runner sets reasoning via `-c model_reasoning_effort="..."` against config. Local probe: `codex exec --help 2>&1 | sed -n '1,220p'`; repo-local source inspection: `sed -n '1,240p' vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`. |
181
+ | Permission / approval flags | `codex exec --sandbox <read-only|workspace-write|danger-full-access>`, `--full-auto`, and `--dangerously-bypass-approvals-and-sandbox` are available. Local probe: `codex exec --help 2>&1 | sed -n '1,220p'`. Official doc: the Codex CLI docs describe approval modes and scripting with `exec`, but the exact adapter-safe flags in this repo should still be taken from the probed CLI help because the current runner uses them directly. Source: <https://developers.openai.com/codex/cli>. |
182
+ | Streaming / log behavior | `codex exec --json` emits JSONL events and `--output-last-message <FILE>` writes the final message to a file. Local probe: `codex exec --help 2>&1 | sed -n '1,220p'`. |
183
+ | Exit-code semantics | The CLI help does not document detailed exit-code semantics beyond standard process completion; the runner currently trusts the child process return code surfaced by Python subprocess calls. Local probe: `codex exec --help 2>&1 | sed -n '1,220p'`; repo-local source inspection: `sed -n '1,240p' vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`. |
184
+ | Context / skill / instruction injection | The current repo injects workflow intent by building prompt strings such as `codex-plan-phase ...` and `codex-execute-phase ...`; there is no separate adapter abstraction yet. Repo-local source inspection: `sed -n '1,260p' vendor/phase-loop-runtime/src/phase_loop_runtime/prompts.py` and `sed -n '1,260p' vendor/phase-loop-runtime/src/phase_loop_runtime/runner.py`. |
185
+ | Installed-skill discovery / install paths | Repo-local docs and bootstrap install Codex workflow skills under `~/.codex/skills/`, with shared skills mirrored from `shared/skills/` and Codex-private workflow skills from `codex-config/skills/`. Repo-local source inspection: `sed -n '1,260p' README.md`, `sed -n '1,240p' claude-config/AGENTS.md`, and `sed -n '1240,1395p' bootstrap.sh`. Official doc: the Codex CLI setup page documents install and sign-in but not repo-specific skill deployment. Source: <https://developers.openai.com/codex/cli>. |
186
+
187
+ ## Claude Code / ThawedCode
188
+
189
+ Maturity: Claude Code is `proof-blocked` for autonomous live dispatch until the
190
+ authenticated non-interactive planning smoke completes; ThawedCode-specific
191
+ automation remains `manual-only` until independently proven.
192
+
193
+ `BASELINE` adds the 2026-06-18 route policy freeze without changing runtime
194
+ behavior. The validated facts are: normal `claude -p` worked under Claude Code
195
+ subscription auth; `--bare -p` failed without API-key or helper auth; fakechat
196
+ Channel ingress and reply worked without spawning `claude -p`; and remote
197
+ permission relay remains unproven. `IF-0-BASELINE-1` therefore freezes the
198
+ Claude route policy as Channel-first for managed local sessions, Agent View for
199
+ async dispatch, and `claude -p` only as a compatibility route when the task
200
+ explicitly accepts one-shot and billing-sensitive execution.
201
+
202
+ `CHANNEL` adds the repo-local local-only proof surface for that replacement
203
+ direction. `IF-0-CHANNEL-1` freezes the harness event envelope as
204
+ `{event_id, session_id, sender, content, attachments, created_at, ack_policy}`:
205
+ the loopback sidecar generates `event_id` once, preserves it through delivery
206
+ and acknowledgement state, keeps `sender` non-secret, restricts attachments to
207
+ metadata refs, and uses `ack_policy=tool_ack_required`. `IF-0-CHANNEL-2`
208
+ freezes the Channel tool payload as
209
+ `{event_id, status, text, artifacts, error, final}` with `status` limited to
210
+ `received`, `working`, `blocked`, `done`, or `error`; `final=true` acknowledges
211
+ delivery only after the sidecar records a matching `reply` or `status` tool
212
+ call. The proof remains loopback-only, does not use `claude -p`, and leaves
213
+ permission relay explicitly deferred to `PERMISSION`. On this host, the offline
214
+ contract checks, dry-run proof, and live acknowledgement proof pass under
215
+ Claude Code 2.1.181 with normal Claude Max subscription auth. The proved launch
216
+ shape is
217
+ `claude --dangerously-load-development-channels server:phase-loop-channel --allowedTools mcp__phase-loop-channel__reply,mcp__phase-loop-channel__status --model sonnet`.
218
+ The Claude-facing channel process uses the MCP SDK over stdio, polls the Python
219
+ loopback sidecar, emits `notifications/claude/channel`, and records delivery
220
+ only after Claude calls the hyphenated MCP tool identifier
221
+ `mcp__phase-loop-channel__status` or `mcp__phase-loop-channel__reply`.
222
+
223
+ `DFCHCONTRACT` freezes the metadata-only Claude route result that governed
224
+ adapters mirror before route behavior changes. `IF-0-DFCHCONTRACT-1` is:
225
+ `{route, session_id, event_id, status, text, artifacts, auth_posture, billing_posture, trust_state, permission_state, warnings, evidence_refs}`.
226
+ Route is limited to `claude_channel`, `claude_agent_view`, or `claude_print`.
227
+ `auth_posture` records `subscription_local`, `api_key`, or `unknown`;
228
+ `billing_posture` records `subscription_included`, `api_key_billed`,
229
+ `usage_credit`, or `unknown` and is never inferred from command success alone.
230
+ The local governed default remains `claude_channel`; `claude_agent_view` is the
231
+ async route; `claude_print` is billing-sensitive compatibility and must not be
232
+ used as a silent fallback from a failed Channel preflight. `IF-0-DFCHCONTRACT-2`
233
+ keeps `phase_loop_closeout.v1` governed-compatible through nested
234
+ `verification.status` and `source_bundle.pipeline_mode`. The fixture
235
+ `vendor/phase-loop-runtime/tests/fixtures/phase_loop_pipeline_bridge/dfchcontract_claude_route_evidence.json`
236
+ is the dotfiles-owned mirror target for governed-pipeline v25.
237
+
238
+ `PERMISSION` adds the local-only security envelope for that Channel route.
239
+ `IF-0-PERMISSION-1` freezes permission requests as
240
+ `{request_id, session_id, tool_name, description, input_preview, risk_class, requested_at}`
241
+ and permission verdicts as
242
+ `{request_id, verdict, actor, reason, decided_at}` with `verdict` limited to
243
+ `allow` or `deny`. The sidecar accepts only non-secret `input_preview` metadata
244
+ and rejects raw tool input payload fields. When a local bearer token is
245
+ configured, harness message writes and permission verdict writes require
246
+ `Authorization: Bearer <token>`; missing auth fails with 401 and wrong tokens
247
+ fail with 403. Sender allowlists fail closed before a message can be enqueued.
248
+ Verdict audit entries preserve `{request_id, session_id, verdict, actor, reason, decided_at}`
249
+ and never serialize raw tool inputs or bearer tokens. The Channel plugin
250
+ declares permission relay support while preserving `experimental.claude/channel`
251
+ and the hyphenated `mcp__phase-loop-channel__reply` /
252
+ `mcp__phase-loop-channel__status` tools. Permission notifications contain only
253
+ `request_id`, `tool_name`, `description`, `input_preview`, `risk_class`, and
254
+ `requested_at`, and instruct operators to route allow/deny decisions through
255
+ the authenticated local harness endpoint instead of raw terminal control.
256
+ Remote non-loopback transport and broader workspace trust changes remain
257
+ explicit non-goals for this phase.
258
+
259
+ `SESSION` adds the managed local session layer without changing the route
260
+ policy. `IF-0-SESSION-1` freezes `GET /sessions` as
261
+ `{"sessions": [...]}` where each session record contains
262
+ `{session_id, adapter, cwd, state, auth_posture, trust_state, channel_health, last_event_id, last_reply_at, permission_state}`.
263
+ The `claude_channel` adapter records non-secret launch metadata before
264
+ dispatch, keeps `state` to `disconnected`, `starting`, `ready`, `blocked`,
265
+ `stopped`, or `stale`, and keeps `channel_health` to `disconnected`,
266
+ `starting`, `ready`, `blocked`, or `stopped`. Channel replies update
267
+ `last_event_id`, `last_reply_at`, and ready or blocked health; permission audit
268
+ events update `permission_state` without exposing raw tool input, bearer
269
+ tokens, or local environment values.
270
+
271
+ The managed launch wrapper preserves the proved Channel command shape
272
+ (`server:phase-loop-channel` with the hyphenated
273
+ `mcp__phase-loop-channel__reply` and `mcp__phase-loop-channel__status` tool
274
+ identifiers) and preflights workspace trust, repo-local `.mcp.json` trust
275
+ posture including `pmcp` pending approval, Claude auth posture, and hidden
276
+ Channel support before dispatch. Notification, Stop, and UserPromptSubmit hooks
277
+ fan out metadata-only hook events to the sidecar when
278
+ `PHASE_LOOP_CHANNEL_SIDECAR_URL` and a session id are present, while preserving
279
+ the existing Zellij notification and clear behavior when no sidecar is active.
280
+ Cleanup now recognizes stale managed Channel session processes while retaining
281
+ the protected harness process allowlist.
282
+
283
+ `HARDEN` packages that Channel path as a repeatable local install contract.
284
+ `IF-0-HARDEN-1` freezes
285
+ `claude-config/plugins/phase-loop-channel/.claude-plugin/plugin.json`,
286
+ `package.json`, `bun.lock`, the plugin README, root README, ONBOARDING, and
287
+ `scripts/launch-claude-channel-session --dry-run --json` as the clean-machine
288
+ setup surface. The dry-run reports
289
+ `{session_id, adapter, cwd, state, auth_posture, trust_state, channel_health, command, plugin_dir}`
290
+ without secrets and preserves `server:phase-loop-channel` plus the hyphenated
291
+ `mcp__phase-loop-channel__reply` and
292
+ `mcp__phase-loop-channel__status` tool identifiers. Generated dependency trees
293
+ such as `node_modules` remain install output, not package contract files.
294
+
295
+ `IF-0-HARDEN-2` keeps the sidecar local-only by default. Remote client posture
296
+ stays blocked unless explicit bearer-token or equivalent harness auth plus
297
+ sender allowlist policy exists before message, reply/status, or
298
+ permission-verdict writes. Permission audit entries remain
299
+ `{request_id, session_id, verdict, actor, reason, decided_at}`; redaction tests
300
+ cover bearer tokens, local env values, raw tool input, OAuth/keychain payloads,
301
+ terminal transcripts, and provider payload fields.
302
+
303
+ `IF-0-HARDEN-3` freezes the operator smoke story: offline Channel dry-run,
304
+ opt-in live Channel ingress/reply proof, opt-in permission-relay proof, Agent
305
+ View blocked/completed lifecycle checks, and `claude -p` print compatibility.
306
+ Each smoke reports skipped, blocked, or passed with a non-secret summary.
307
+ Fakechat remains validation tooling only and is not promoted to shared default
308
+ Claude settings.
309
+
310
+ `BG` adds Agent View as a secondary async Claude Code path and freezes
311
+ `IF-0-BG-1`. The adapter lists background sessions with
312
+ `claude agents --json --all` and reduces each record to non-secret
313
+ `AgentViewSession` metadata:
314
+ `{id, session_id, cwd, kind, state, status, name, started_at, pid}`. State
315
+ reduction is limited to `running`, `done`, `blocked`, `stopped`, `failed`, and `unknown`;
316
+ unknown CLI states are retained as unknown metadata instead of being treated as
317
+ success. Agent View launch preparation builds `claude --bg` commands only after
318
+ workspace and repo-local `.mcp.json` trust preflights pass, including
319
+ `pmcp_pending_approval`; trust or unsupported launch posture is reported as a
320
+ structured blocker and never silently falls back to `claude -p`.
321
+
322
+ Agent View treats `claude logs <id>` as human-readable operator text, not a
323
+ stable machine-state API. The adapter exposes command builders for
324
+ `claude attach <id>`, `claude stop <id>`, and `claude rm <id>` without parsing
325
+ terminal output as a contract. Stopped and done sessions are eligible for
326
+ documented `claude rm <id>` cleanup, while blocked records are not force-removed
327
+ by list or status operations; if `claude rm` refuses a blocked record, the
328
+ adapter reports an operator-visible blocker summary and does not mark the
329
+ session deleted. BG does not promote Agent View to the default Claude route,
330
+ does not parse `~/.claude/jobs` as the primary API, and does not change the
331
+ Channel-first policy for managed local sessions.
332
+
333
+ `DFSMOKE` closes the migration baseline for operator routing. The primary local
334
+ route is `PHASE_LOOP_CLAUDE_ROUTE=channel` with
335
+ `PHASE_LOOP_CLAUDE_CHANNEL_URL` and `PHASE_LOOP_CHANNEL_SESSION_ID` or
336
+ `PHASE_LOOP_CLAUDE_CHANNEL_SESSION_ID`; this preserves
337
+ subscription-authenticated local Claude Code sessions and blocks on failed
338
+ Channel preflight. The async route is `PHASE_LOOP_CLAUDE_ROUTE=agent_view` and
339
+ uses Agent View / `claude --bg` lifecycle metadata. The CI or one-shot route is
340
+ `PHASE_LOOP_CLAUDE_ROUTE=print`, is billing-sensitive `claude -p`
341
+ compatibility, and must be selected explicitly. Emergency PTY/tmux control is a
342
+ manual fallback for legacy TUI sessions only, not the first-class control plane.
343
+
344
+ `MIGRATE` may consume `IF-0-SESSION-1` and `IF-0-BG-1` only after BG
345
+ verification passes and dirty paths are limited to the BG owned files. SESSION
346
+ does not migrate phase-loop Claude dispatch, does not remove the existing local
347
+ notification path, does not broaden remote transport, and does not write
348
+ secrets.
349
+
350
+ `CLIRESEARCH` on 2026-04-27 froze
351
+ `docs/phase-loop/claude-code-v6-research.md` as the current v6 Claude baseline.
352
+ That artifact and `docs/phase-loop/claude-code-v6-live-proof.md` are the
353
+ source of truth for the local CLI probe ledger, official doc coverage, PMCP /
354
+ Context7 replay notes, teammate-mode reconciliation, the disposable live-proof
355
+ results, and the risk table consumed by `CLAEXEC`, `PLUGINPACK`, `TEAMGOV`,
356
+ `TASKLEDGER`, `DELEGATE`, and `LIVEPROOF`. `PROMOTE` reduces those inputs into
357
+ four support slices and keeps only the currently defensible claims published.
358
+
359
+ `TEAMGOV` now freezes a second-layer posture inside the Claude adapter:
360
+ `solo`, `subagent`, and `agent_team` execution modes are tracked separately in
361
+ launch metadata. `PROMOTE` adds a fourth operator-facing slice,
362
+ `claude_delegated_worker`, for runner-brokered Claude child work. `solo`
363
+ remains the launch default; `subagent` and `agent_team` stay operator
364
+ `experimental`, require a team-safe phase-plan ownership assessment, and keep
365
+ task-list or teammate controls denied by default until `TASKLEDGER` and
366
+ `LIVEPROOF` add stronger observability and proof. Runner-brokered Claude child
367
+ work stays proof-blocked until the same autonomous closeout contract is proven
368
+ under child execution.
369
+
370
+ | Field | Current finding |
371
+ | --- | --- |
372
+ | Prompt input | Claude Code defaults to interactive mode and uses `-p, --print` for non-interactive output. The runner keeps explicit `PHASE_LOOP_CLAUDE_ROUTE=print` compatibility with `claude -p --verbose --output-format stream-json`, sends Channel route prompts through the local sidecar, and builds Agent View async prompts with `claude --bg`. Print is billing-sensitive compatibility and never a silent fallback from Channel or Agent View failure. Local probe: `claude --help 2>&1 | grep -nE -- '--print|--output-format|--permission-mode|--plugin-dir|--worktree|--add-dir|--effort|--model|--system-prompt|--append-system-prompt'`. Official doc: Anthropic documents `--print` as the non-interactive surface. Source: <https://code.claude.com/docs/en/cli-reference>. |
373
+ | CWD selection | The CLI exposes `--add-dir <directories...>` for additional tool access and `-w, --worktree [name]` for a new git worktree session. Local probe: `claude --help 2>&1 | grep -nE -- '--print|--output-format|--permission-mode|--plugin-dir|--worktree|--add-dir|--effort|--model|--system-prompt|--append-system-prompt'`. Official doc: Anthropic documents both `--add-dir` and `--worktree`. Source: <https://code.claude.com/docs/en/cli-reference>. |
374
+ | Model flags | `claude --model <model>` is available. Local probe: `claude --help 2>&1 | grep -nE -- '--print|--output-format|--permission-mode|--plugin-dir|--worktree|--add-dir|--effort|--model|--system-prompt|--append-system-prompt'`. Official doc: Anthropic documents `--model`. Source: <https://code.claude.com/docs/en/cli-reference>. |
375
+ | Reasoning / effort flags | `claude --effort <low|medium|high|xhigh|max>` is available. Local probe: `claude --help 2>&1 | grep -nE -- '--print|--output-format|--permission-mode|--plugin-dir|--worktree|--add-dir|--effort|--model|--system-prompt|--append-system-prompt'`. Official doc: Anthropic documents the flag in current CLI reference. Source: <https://code.claude.com/docs/en/cli-reference>. |
376
+ | Permission / approval flags | `--permission-mode` supports `acceptEdits`, `auto`, `bypassPermissions`, `default`, `dontAsk`, and `plan`; `--dangerously-skip-permissions` also exists in current local help. Local probe: `claude --help 2>&1 | sed -n '1,120p'`. Official doc: Anthropic documents `--permission-mode`; current repo execution should still probe the live CLI before locking exact values. Source: <https://code.claude.com/docs/en/cli-reference>. |
377
+ | Streaming / log behavior | `--output-format <text|json|stream-json>` and `--input-format <text|stream-json>` are documented for print mode. The current runner uses `--output-format stream-json`; downstream reduction consumes the streamed events and closeout text rather than relying on Channel ingress for this compatibility route. Local probe: `claude --help 2>&1 | sed -n '1,120p'`. Official doc: Anthropic documents both surfaces. Source: <https://code.claude.com/docs/en/cli-reference>. |
378
+ | Exit-code semantics | The current official CLI reference enumerates print-mode output formats but does not publish a detailed exit-code contract for automation in the surfaced page reviewed here. Mark as unknown pending a stronger vendor guarantee. |
379
+ | Context / skill / instruction injection | Claude Code supports `--system-prompt`, `--append-system-prompt`, `--plugin-dir`, `--agents`, `--settings`, and `--mcp-config`; `--bare` explicitly says skills still resolve via `/skill-name` when present, but the 2026-06-18 validation keeps bare mode outside the subscription-auth route. The current runner materializes a run-local bundle, passes `--plugin-dir`, `--settings`, inline `--agents` JSON, `--mcp-config`, `--tools`, `--disallowedTools`, `--add-dir`, `--model`, `--effort`, and optional `--json-schema`, and records only redacted bundle-path and hash metadata. Local probe: `claude --help 2>&1 | sed -n '1,120p'`; repo-local source inspection: `build_claude_command(...)`, `_resolve_command_context(...)`, `_claude_bundle_paths(...)`, and `_claude_context_prompt(...)` in `vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`. Official docs: Anthropic documents plugin-directory, dynamic `--agents` JSON, and plugin component layout. Sources: <https://code.claude.com/docs/en/cli-usage>, <https://code.claude.com/docs/en/plugins-reference>. |
380
+ | Installed-skill discovery / install paths | Repo-local docs install Claude workflow skills at `~/.claude/skills/`, shared skills from `shared/skills/`, and Claude-private workflow skills from `claude-config/claude-skills/`. Repo-local source inspection: `sed -n '1,260p' README.md`, `sed -n '1,240p' claude-config/AGENTS.md`, and `sed -n '1240,1395p' bootstrap.sh`. ThawedCode status: no separate official ThawedCode CLI documentation was found during this phase, so downstream work should treat ThawedCode as an unverified Claude-compatible variant rather than a separately cleared adapter contract. |
381
+
382
+ Current permission mapping remains a compatibility-launch inventory item:
383
+ `_claude_permission_mode(...)` maps review to `plan`, execute and repair to
384
+ `bypassPermissions`, other actions to `acceptEdits`, and explicit
385
+ `bypass_approvals` to `bypassPermissions` plus
386
+ `--dangerously-skip-permissions`. BASELINE records this behavior for later
387
+ route-policy work and does not endorse broadening it.
388
+
389
+ DOCSCLOSE authenticated proof on 2026-04-26 confirmed `claude auth status`
390
+ with a subscription-backed local session, then observed the disposable
391
+ `claude-plan-phase` child produce no closeout before the runner timeout. This
392
+ is a live-dispatch proof blocker, not an auth blocker; keep Claude manual TUI
393
+ reentry and manual imports available through the shared state ledger.
394
+
395
+ ### Frozen Claude Failure Inventory
396
+
397
+ The proof-blocking Claude cases are explicit parity failures, not vague
398
+ warnings:
399
+
400
+ | Failure case | Frozen reduction |
401
+ | --- | --- |
402
+ | Non-interactive timeout before closeout | `adapter_failure` plus operator `proof-blocked`; route to repair instead of describing the phase as complete. |
403
+ | Empty or unusable output capture | `adapter_failure`; the runner must not treat an empty log or malformed JSON body as success. |
404
+ | Missing `automation:` block | `adapter_failure` and repairable non-human blocker because the child did not emit the shared closeout contract. |
405
+ | Missing terminal summary | `adapter_failure` and repairable non-human blocker because closeout and monitor surfaces are incomplete. |
406
+ | Stale handoff or state after repair | `adapter_failure` until a repair flow writes fresh shared artifacts that supersede the stale ones. |
407
+
408
+ ## Gemini CLI
409
+
410
+ Maturity: `live-supported`
411
+
412
+ | Field | Current finding |
413
+ | --- | --- |
414
+ | Prompt input | Gemini CLI defaults to interactive mode and uses `-p, --prompt` for non-interactive headless mode; positional query arguments remain interactive by default. Local probe: `gemini --help 2>&1 | sed -n '1,220p'`. Official doc: Gemini CLI configuration docs describe non-interactive output and currently mark `--prompt` as deprecated in favor of positional arguments, which means adapter work must pin to the live CLI it launches. Source: <https://geminicli.com/docs/reference/configuration/>. |
415
+ | CWD selection | `-w, --worktree` creates a new git worktree session, and `--include-directories` expands the workspace. Headless disposable runs also need `--skip-trust` or equivalent workspace trust configuration; otherwise Gemini overrides approval mode and exits before the run starts. Local probe: `gemini --help 2>&1 | sed -n '1,220p'` plus a disposable `gemini -p ... --approval-mode plan --output-format json` smoke. Official doc: current configuration docs describe extension and output surfaces; the local help is the authoritative probe for the present launcher-ready flags. Source: <https://geminicli.com/docs/reference/configuration/>. |
416
+ | Model flags | `gemini --model <model>` is available. Local probe: `gemini --help 2>&1 | sed -n '1,220p'`. Official doc: Gemini CLI configuration documents `--model`. Source: <https://geminicli.com/docs/reference/configuration/>. |
417
+ | Reasoning / effort flags | No dedicated reasoning-effort flag was documented or probed in the current CLI surface reviewed here. Plan/read-only behavior exists via `--approval-mode plan` and planning tools, but that is not equivalent to a model reasoning knob. Local probe: `gemini --help 2>&1 | sed -n '1,220p'`. Official doc: Gemini planning tools document read-only plan mode. Source: <https://geminicli.com/docs/tools/planning/>. |
418
+ | Permission / approval flags | `--approval-mode <default|auto_edit|yolo|plan>`, `--sandbox`, and deprecated `--allowed-tools` exist; the policy engine ties rules to approval modes. Local probe: `gemini --help 2>&1 | sed -n '1,220p'`. Official doc: Gemini policy-engine docs describe approval modes, including `plan`. Source: <https://geminicli.com/docs/reference/policy-engine/>. |
419
+ | Streaming / log behavior | `--output-format <text|json|stream-json>` is available. Local disposable smoke on 2026-04-26 showed `json` returning a top-level `response` string after warning prelude lines, and `stream-json` emitting assistant `message` deltas before a final `result` record. Official doc: Gemini configuration documents `text`, `json`, and `stream-json`. Source: <https://geminicli.com/docs/reference/configuration/>. |
420
+ | Exit-code semantics | The reviewed Gemini docs and help output do not publish an adapter-safe exit-code contract beyond normal process completion. Mark as unknown. |
421
+ | Context / skill / instruction injection | Gemini supports policy injection via `--policy` and `--admin-policy`, plus extension selection via `--extensions`. Skills are a native surface and load on demand once activated. Local probe: `gemini --help 2>&1 | sed -n '1,220p'; gemini skills --help 2>&1 | sed -n '1,220p'; gemini extensions --help 2>&1 | sed -n '1,220p'`. Official doc: Gemini skills docs describe user, workspace, and extension skill tiers, and extension docs describe extension-based packaging. Sources: <https://geminicli.com/docs/cli/skills/>, <https://geminicli.com/extensions/about/>. |
422
+ | Installed-skill discovery / install paths | Official doc: Gemini discovers workspace skills from `.gemini/skills/` or `.agents/skills/`, user skills from `~/.gemini/skills/` or `~/.agents/skills/`, and extension skills from installed extensions. Source: <https://geminicli.com/docs/cli/skills/>. Repo-local docs and bootstrap deploy Gemini workflow skills to `~/.gemini/skills/` from `gemini-config/skills/`, and shared skills to both `~/.gemini/skills/` and `~/.agents/skills/`. Repo-local source inspection: `sed -n '1,260p' README.md`, `sed -n '1,240p' claude-config/AGENTS.md`, and `sed -n '1240,1395p' bootstrap.sh`. |
423
+
424
+ ## OpenCode
425
+
426
+ Maturity: `live-supported`
427
+
428
+ | Field | Current finding |
429
+ | --- | --- |
430
+ | Prompt input | `opencode run [message..]` is the non-interactive command surface in the currently installed CLI. Local probe: `opencode run --help 2>&1 | sed -n '1,220p'`. Official doc: the OpenCode CLI docs describe `opencode run` as the command surface for scripted use. Source: <https://opencode.ai/docs/cli/>. |
431
+ | CWD selection | `opencode run --dir <path>` selects the directory, and `--attach` can target a running server. Local probe: `opencode run --help 2>&1 | sed -n '1,220p'`. Official doc: OpenCode CLI docs document `--attach`; the local help exposes `--dir` in the currently installed build. Source: <https://opencode.ai/docs/cli/>. |
432
+ | Model flags | `opencode run --model <provider/model>` is available. Local probe: `opencode run --help 2>&1 | sed -n '1,220p'`. Official doc: OpenCode CLI docs and model docs use the `provider/model` form. Sources: <https://opencode.ai/docs/cli/>, <https://opencode.ai/docs/models>. |
433
+ | Reasoning / effort flags | `opencode run --variant <provider-specific reasoning effort, e.g. high, max, minimal>` exists in the installed CLI. Local probe: `opencode run --help 2>&1 | sed -n '1,220p'`. Official doc: the reviewed docs show model selection but do not yet surface a stable generic reasoning-variant contract for automation; treat `--variant` as probe-backed, not doc-frozen. |
434
+ | Permission / approval flags | `--dangerously-skip-permissions` exists in the current CLI; OpenCode config and agent docs define permission states such as `allow`, `ask`, and `deny`, and current defaults are permissive unless config narrows them. The phase-loop live adapter therefore records permission posture explicitly and fails closed unless the runner intentionally opts into the permissive path. Local probes: `opencode run --help 2>&1 | sed -n '1,220p'` and `opencode agent list`. Official docs: OpenCode config and permissions docs define the permission model and default allow posture. Sources: <https://opencode.ai/docs/config/>, <https://opencode.ai/docs/permissions/>. |
435
+ | Streaming / log behavior | `opencode run --format <default|json>` exposes formatted vs raw JSON event output; `--print-logs` sends logs to stderr. Local probe: `opencode run --help 2>&1 | sed -n '1,220p'`. Official doc: OpenCode CLI docs document JSON formatting for scripted output. Source: <https://opencode.ai/docs/cli/>. |
436
+ | Exit-code semantics | The reviewed docs do not publish a detailed non-interactive exit-code contract. Mark as unknown. |
437
+ | Context / skill / instruction injection | OpenCode config supports `instructions` files, agent markdown/config files, and prompt files such as `prompt: {file:...}` for agents. The live phase-loop adapter keeps the prompt body minimal and points the child at run-local `.codex/phase-loop/runs/<run-id>/context.md`, treating repo-sourced injected context as authoritative and installed-skill drift as warning-only metadata. Local probes: `opencode agent --help 2>&1 | sed -n '1,220p'` and repo-local source inspection of `vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`. Official docs: config and agents docs cover instruction files, prompt files, and markdown agents. Sources: <https://opencode.ai/docs/config/>, <https://opencode.ai/docs/agents/>. |
438
+ | Installed-skill discovery / install paths | Official doc: OpenCode discovers skills from `.opencode/skills/`, `~/.config/opencode/skills/`, `.claude/skills/`, `~/.claude/skills/`, `.agents/skills/`, and `~/.agents/skills/`, walking upward to the git worktree for project-local paths. Source: <https://opencode.ai/docs/skills>. Repo-local docs and bootstrap deploy OpenCode workflow skills to `~/.config/opencode/skills/` from `opencode-config/skills/`, while shared skills are mirrored into both `~/.config/opencode/skills/` and `~/.agents/skills/`. Repo-local source inspection: `sed -n '1,260p' README.md`, `sed -n '1,240p' claude-config/AGENTS.md`, and `sed -n '1240,1395p' bootstrap.sh`. |
439
+
440
+ ## Generic Command Adapter
441
+
442
+ Maturity: `experimental`
443
+
444
+ | Field | Current finding |
445
+ | --- | --- |
446
+ | Prompt input | `CMDENTRY` freezes the public generic surface as an explicit `--executor command` path plus `--command-name` and `--command-template`. The current implementation supports only `context_file` delivery: the template must include `{context_file}` so the runner can deliver the repo-sourced workflow bundle without inlining raw context into argv. Repo-local source inspection: `sed -n '1,260p' vendor/phase-loop-runtime/src/phase_loop_runtime/cli.py` and `sed -n '260,520p' vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`. |
447
+ | CWD selection | The runner keeps cwd runner-owned and records it as `wrapped_cwd` in `launch.json`; templates may reference `{cwd}` or `{repo}`, but the adapter still launches from the selected repo root instead of inventing a separate workspace model. Repo-local source inspection: `sed -n '260,520p' vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py` and `sed -n '40,110p' vendor/phase-loop-runtime/src/phase_loop_runtime/observability.py`. |
448
+ | Model flags | The adapter does not define a universal model flag, but the template may opt into `{model}` when the wrapped command understands one. Unsupported placeholders fail closed. Repo-local source inspection: `sed -n '260,520p' vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`. |
449
+ | Reasoning / effort flags | The template may opt into `{effort}` when the wrapped command exposes a reasoning control. No cross-command effort contract is implied beyond explicit placeholder substitution. Repo-local source inspection: `sed -n '260,520p' vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`. |
450
+ | Permission / approval flags | The generic adapter does not normalize wrapped-command approval semantics. Permission posture remains `manual`, keeping the runner's safety policy explicit and preventing the adapter from pretending arbitrary subprocesses are first-class live harnesses. Repo-local source inspection: `sed -n '1,220p' vendor/phase-loop-runtime/src/phase_loop_runtime/capability_registry.py`. |
451
+ | Streaming / log behavior | Current local source uses `subprocess.run(..., capture_output=True, text=True, check=False)` for no-log execution and `subprocess.Popen(..., stdout=PIPE, stderr=STDOUT, text=True)` for log streaming. Repo-local source inspection: `sed -n '1,240p' vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`. Official doc: Python subprocess docs define `run`, `Popen`, and `returncode` behavior. Source: <https://docs.python.org/3.11/library/subprocess.html>. |
452
+ | Exit-code semantics | Current local source trusts child `returncode`; Python docs state that `Popen.returncode` is initially `None` and is set once termination is detected. Repo-local source inspection: `sed -n '1,240p' vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`. Official doc: Python subprocess docs define `returncode`. Source: <https://docs.python.org/3.11/library/subprocess.html>. |
453
+ | Context / skill / instruction injection | The frozen generic contract is repo-sourced context-file delivery only. Launch metadata records `command_adapter_name`, `command_template`, `wrapped_cwd`, `context_path`, and `context_sha256`; unsupported command shapes such as missing `{context_file}` or unsupported placeholders block before launch. Repo-local source inspection: `sed -n '1,260p' shared/phase-loop/protocol.md`, `sed -n '260,520p' vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`, and `sed -n '340,760p' vendor/phase-loop-runtime/src/phase_loop_runtime/runner.py`. |
454
+ | Installed-skill discovery / install paths | Not applicable generically. The command adapter receives the repo-sourced workflow bundle directly and does not claim any installed-skill contract for the wrapped command. |
455
+
456
+ ## Local Probe Inventory
457
+
458
+ All local claims above come from metadata-only help, version, path, or source-inspection commands:
459
+
460
+ | Probe | Purpose |
461
+ | --- | --- |
462
+ | `git status --short -- plans/phase-plan-v5-PROMOTE.md` | Confirmed the `PROMOTE` plan artifact was staged before execution. |
463
+ | `test ! -e docs/phase-loop/harness-capability-matrix.md && rg -n "build_codex_command|codex-plan-phase|codex-execute-phase|codex-phase-roadmap-builder|codex-phase-loop|subprocess\\.run|Popen" vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py vendor/phase-loop-runtime/src/phase_loop_runtime/prompts.py vendor/phase-loop-runtime/src/phase_loop_runtime/runner.py README.md bootstrap.sh` | Confirmed the current runner is still Codex-specific and the target artifact did not yet exist. |
464
+ | `rg -n "~/.claude/skills|~/.codex/skills|~/.config/opencode/skills|~/.gemini/skills|shared/skills|claude-config/claude-skills|codex-config/skills|opencode-config/skills|gemini-config/skills" README.md bootstrap.sh claude-config/AGENTS.md codex-config/shared/runtime-state.md claude-config/shared/runtime-state.md opencode-config/shared/runtime-state.md gemini-config/shared/runtime-state.md` | Reduced repo-local skill install and runtime-state paths. |
465
+ | `codex --version`, `claude --version`, `gemini --version`, `opencode --version` | Captured installed CLI versions. |
466
+ | `codex exec --help 2>&1 | sed -n '1,220p'` | Captured the current non-interactive Codex adapter surface. |
467
+ | `claude --help 2>&1 | sed -n '1,120p'` and `claude --help 2>&1 | grep -nE -- '--print|--output-format|--permission-mode|--plugin-dir|--worktree|--add-dir|--effort|--model|--system-prompt|--append-system-prompt'` | Captured the current Claude Code non-interactive, permission, and prompt-injection surfaces. |
468
+ | `gemini --help 2>&1 | sed -n '1,220p'`, `gemini skills --help 2>&1 | sed -n '1,220p'`, and `gemini extensions --help 2>&1 | sed -n '1,220p'` | Captured Gemini CLI headless, policy, skills, and extension surfaces. |
469
+ | `opencode run --help 2>&1 | sed -n '1,220p'` and `opencode agent --help 2>&1 | sed -n '1,220p'` | Captured OpenCode run, formatting, permission-skip, directory, and agent-management surfaces. |
470
+ | `sed -n '1,260p' README.md`, `sed -n '1,240p' claude-config/AGENTS.md`, `sed -n '1,220p' codex-config/shared/runtime-state.md`, `sed -n '1,220p' claude-config/shared/runtime-state.md`, `sed -n '1,220p' opencode-config/shared/runtime-state.md`, `sed -n '1,220p' gemini-config/shared/runtime-state.md`, and `sed -n '1240,1395p' bootstrap.sh` | Reduced repo-local skill deployment, discovery, and runtime-state paths. |
471
+ | `sed -n '1,240p' vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py`, `sed -n '1,260p' vendor/phase-loop-runtime/src/phase_loop_runtime/prompts.py`, and `sed -n '1,260p' vendor/phase-loop-runtime/src/phase_loop_runtime/runner.py` | Confirmed the current runner still hardcodes Codex command construction and prompt wording. |
472
+
473
+ ## Adapter Constraints and Known Limits
474
+
475
+ 1. `vendor/phase-loop-runtime/src/phase_loop_runtime/launcher.py` and `vendor/phase-loop-runtime/src/phase_loop_runtime/runner.py` are still Codex-only because launch construction flows through `build_codex_command(...)`; ADAPTER must introduce a neutral executor interface before any non-Codex launch is real.
476
+ 2. `vendor/phase-loop-runtime/src/phase_loop_runtime/prompts.py` is also Codex-only because the built prompt bodies literally emit `codex-phase-roadmap-builder`, `codex-plan-phase`, `codex-execute-phase`, and `codex-phase-loop` command strings. PROTOCOL can standardize outputs first, but ADAPTER and INJECT must stop assuming the child understands Codex skill names.
477
+ 3. `README.md` and `bootstrap.sh` already distinguish shared private skills from harness-private workflow skills. INJECT should preserve that split instead of flattening all harnesses into one install root.
478
+ 4. Gemini and OpenCode both have native skill ecosystems, but they are not contract-compatible with Codex workflow skill names. INJECT should model these as separate delivery modes: native skill discovery where supported, inline or file-based instruction fallback otherwise.
479
+ 5. Claude Code currently has a documented non-interactive `--print` path plus prompt and plugin injection surfaces, but the DOCSCLOSE disposable planning smoke timed out before closeout. Operator docs should keep `claude_solo` and `claude_delegated_worker` proof-blocked until that verifier passes, while treating `claude_subagent` and `claude_agent_team` as governed experimental slices and keeping ThawedCode-specific automation manual-only unless a later phase verifies it directly.
480
+ 6. IF-0-BASELINE-1 freezes Claude routing policy for downstream work: Channel-first for managed local sessions, Agent View for async dispatch, and `claude -p` only as the explicit compatibility route when one-shot and billing-sensitive execution is acceptable.
481
+ 7. OpenCode currently defaults to permissive permissions unless config narrows them, while Codex, Claude Code, and Gemini expose more explicit command-line approval toggles. CAPREG should treat permission posture as part of capability selection instead of assuming one safe default across harnesses.
482
+ 8. The generic command adapter is not ready for promotion beyond an experimental wrapper until a later roadmap proves how prompt text, cwd, model selection, approval posture, and observability remain constrained across arbitrary commands.
483
+ ## Shared Compatibility Fixtures
484
+
485
+ As of `XREPOFIXTURE`, a set of canonical JSON fixtures is available for validating any phase-loop harness or adapter against the `phase_loop_closeout.v1` schema.
486
+
487
+ ### Usage in Validation
488
+
489
+ All harnesses (Codex, Claude, Gemini, OpenCode, and Generic) can be tested against these scenarios:
490
+ - **Location**: `vendor/phase-loop-runtime/tests/fixtures/phase_loop_pipeline_bridge/`
491
+ - **Scenarios**: `complete`, `blocked`, `stale_input`, `failed_verification`, `human_required`.
492
+
493
+ These fixtures serve as the shared truth for cross-repo compatibility and should be the first point of validation for any new adapter or protocol change.
494
+
495
+ ## DFPROMPTSYNC Readiness
496
+
497
+ Prompt and skill surfaces consume the DFPROMPTSYNC receipts at
498
+ `docs/phase-loop/dfpromptsync-contract-map.md` and
499
+ `docs/phase-loop/dfpromptsync-readiness.md`. Harness examples may cite schema
500
+ names, assignment fields, fixture paths, artifact refs, and digests, but must
501
+ not include raw secrets, raw transcripts, raw diffs, raw provider payloads,
502
+ credential file contents, local env values, or prompt-only containment claims.
503
+
504
+ ## DFPARSOAK Integrated Soak
505
+
506
+ The integrated soak consumes `docs/phase-loop/dfparsoak-receipt.md` and
507
+ `docs/phase-loop/dfparsoak-runbook.md`. The route matrix covers Pi Agent
508
+ default, Claude Code CLI exception, Codex CLI fallback, and Gemini CLI
509
+ fallback with model, effort, policy source, fallback reason, lane, wave,
510
+ worktree, and redacted evidence metadata.