wade-cli 1.2.2__tar.gz → 1.2.5__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 (446) hide show
  1. {wade_cli-1.2.2 → wade_cli-1.2.5}/.gitignore +1 -2
  2. {wade_cli-1.2.2 → wade_cli-1.2.5}/AGENTS.md +10 -0
  3. {wade_cli-1.2.2 → wade_cli-1.2.5}/CHANGELOG.md +18 -0
  4. {wade_cli-1.2.2 → wade_cli-1.2.5}/CONTRIBUTING.md +5 -1
  5. {wade_cli-1.2.2 → wade_cli-1.2.5}/KNOWLEDGE.ratings.jsonl +12 -0
  6. {wade_cli-1.2.2 → wade_cli-1.2.5}/PKG-INFO +91 -27
  7. {wade_cli-1.2.2 → wade_cli-1.2.5}/README.md +89 -25
  8. {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/architecture.md +109 -78
  9. wade_cli-1.2.5/docs/dev/crossby-native-planning-checkpoint.md +238 -0
  10. {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/extending.md +18 -0
  11. wade_cli-1.2.5/docs/dev/native-cli-plan-verification.md +87 -0
  12. {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/testing.md +72 -0
  13. {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/workflows-and-skills.md +17 -6
  14. {wade_cli-1.2.2 → wade_cli-1.2.5}/pyproject.toml +2 -2
  15. wade_cli-1.2.5/scripts/fmt.sh +7 -0
  16. wade_cli-1.2.5/scripts/probe_native_plan_handoff.py +119 -0
  17. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/__init__.py +1 -1
  18. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/main.py +38 -4
  19. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/plan_session.py +45 -1
  20. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/review.py +8 -0
  21. wade_cli-1.2.5/src/wade/models/interactive_plan.py +35 -0
  22. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/permission.py +1 -1
  23. wade_cli-1.2.5/src/wade/models/plan_bundle.py +64 -0
  24. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/task.py +5 -0
  25. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/workflow.py +3 -3
  26. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/ai_resolution.py +56 -11
  27. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/bootstrap.py +3 -6
  28. wade_cli-1.2.5/src/wade/services/interactive_plan_service.py +276 -0
  29. wade_cli-1.2.5/src/wade/services/native_plan_service.py +181 -0
  30. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/plan_service.py +503 -284
  31. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/review_delegation_service.py +42 -4
  32. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/materializer.py +9 -5
  33. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/plan_validation.py +35 -1
  34. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/safe_state.py +28 -6
  35. wade_cli-1.2.5/templates/prompts/plan-session.md +20 -0
  36. wade_cli-1.2.5/templates/prompts/session-start-plan.md +7 -0
  37. wade_cli-1.2.5/templates/workflows/plan.md +65 -0
  38. wade_cli-1.2.5/templates/workflows/reference/plan-output-contract.md +62 -0
  39. wade_cli-1.2.5/tests/e2e/test_plan_contract.py +367 -0
  40. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_hooks/test_session_start.py +7 -3
  41. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_permission_mode.py +22 -0
  42. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_ai_resolution.py +9 -1
  43. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_allowlist.py +3 -7
  44. wade_cli-1.2.5/tests/unit/test_services/test_interactive_plan_service.py +210 -0
  45. wade_cli-1.2.5/tests/unit/test_services/test_native_plan_service.py +329 -0
  46. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_plan_service.py +678 -1015
  47. wade_cli-1.2.5/tests/unit/test_services/test_plan_startup_events.py +82 -0
  48. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_crossby_contract.py +56 -2
  49. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_dynamic_skills.py +8 -3
  50. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_yolo.py +18 -27
  51. wade_cli-1.2.5/uv.lock +1164 -0
  52. wade_cli-1.2.2/scripts/fmt.sh +0 -4
  53. wade_cli-1.2.2/templates/prompts/plan-session.md +0 -12
  54. wade_cli-1.2.2/templates/prompts/session-start-plan.md +0 -5
  55. wade_cli-1.2.2/templates/workflows/plan.md +0 -43
  56. wade_cli-1.2.2/templates/workflows/reference/plan-output-contract.md +0 -9
  57. wade_cli-1.2.2/tests/e2e/test_plan_contract.py +0 -230
  58. {wade_cli-1.2.2 → wade_cli-1.2.5}/.gitattributes +0 -0
  59. {wade_cli-1.2.2 → wade_cli-1.2.5}/.github/workflows/auto-version.yml +0 -0
  60. {wade_cli-1.2.2 → wade_cli-1.2.5}/.github/workflows/ci.yml +0 -0
  61. {wade_cli-1.2.2 → wade_cli-1.2.5}/.github/workflows/pr-title-lint.yml +0 -0
  62. {wade_cli-1.2.2 → wade_cli-1.2.5}/.github/workflows/publish.yml +0 -0
  63. {wade_cli-1.2.2 → wade_cli-1.2.5}/.github/workflows/release.yml +0 -0
  64. {wade_cli-1.2.2 → wade_cli-1.2.5}/.pre-commit-config.yaml +0 -0
  65. {wade_cli-1.2.2 → wade_cli-1.2.5}/.wade.yml +0 -0
  66. {wade_cli-1.2.2 → wade_cli-1.2.5}/KNOWLEDGE.md +0 -0
  67. {wade_cli-1.2.2 → wade_cli-1.2.5}/assets/wade.png +0 -0
  68. {wade_cli-1.2.2 → wade_cli-1.2.5}/docker-compose.e2e.yml +0 -0
  69. {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/documentation-policies.md +0 -0
  70. {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/skills-system.md +0 -0
  71. {wade_cli-1.2.2 → wade_cli-1.2.5}/install.sh +0 -0
  72. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/auto_version.py +0 -0
  73. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/changelog.py +0 -0
  74. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/check-all.sh +0 -0
  75. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/check.sh +0 -0
  76. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/hooks/pre-push +0 -0
  77. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/install-hooks.sh +0 -0
  78. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/release.sh +0 -0
  79. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/setup-worktree.sh +0 -0
  80. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-concurrency.sh +0 -0
  81. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-e2e-docker.sh +0 -0
  82. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-e2e.sh +0 -0
  83. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-live-ai-taskr.sh +0 -0
  84. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-live-ai.sh +0 -0
  85. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-live-gh.sh +0 -0
  86. {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test.sh +0 -0
  87. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/__main__.py +0 -0
  88. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/__init__.py +0 -0
  89. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/admin.py +0 -0
  90. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/autocomplete.py +0 -0
  91. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/deps_session.py +0 -0
  92. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/hook.py +0 -0
  93. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/implementation_session.py +0 -0
  94. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/knowledge.py +0 -0
  95. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/review_pr_comments_session.py +0 -0
  96. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/session.py +0 -0
  97. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/session_shared.py +0 -0
  98. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/skills.py +0 -0
  99. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/task.py +0 -0
  100. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/worktree.py +0 -0
  101. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/config/__init__.py +0 -0
  102. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/config/loader.py +0 -0
  103. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/config/migrations.py +0 -0
  104. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/config/schema.py +0 -0
  105. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/__init__.py +0 -0
  106. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/branch.py +0 -0
  107. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/hooks.py +0 -0
  108. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/pr.py +0 -0
  109. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/repo.py +0 -0
  110. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/stash.py +0 -0
  111. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/sync.py +0 -0
  112. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/worktree.py +0 -0
  113. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/hooks/__init__.py +0 -0
  114. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/hooks/cli.py +0 -0
  115. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/hooks/policies.py +0 -0
  116. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/logging/__init__.py +0 -0
  117. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/logging/context.py +0 -0
  118. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/logging/setup.py +0 -0
  119. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/__init__.py +0 -0
  120. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/batch.py +0 -0
  121. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/config.py +0 -0
  122. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/delegation.py +0 -0
  123. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/deps.py +0 -0
  124. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/events.py +0 -0
  125. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/hooks.py +0 -0
  126. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/readiness.py +0 -0
  127. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/review.py +0 -0
  128. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/review_cycle.py +0 -0
  129. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/session.py +0 -0
  130. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/session_manifest.py +0 -0
  131. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/skill.py +0 -0
  132. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/worktree.py +0 -0
  133. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/__init__.py +0 -0
  134. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/_pr_delegate.py +0 -0
  135. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/base.py +0 -0
  136. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/clickup.py +0 -0
  137. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/github.py +0 -0
  138. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/markdown.py +0 -0
  139. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/registry.py +0 -0
  140. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/__init__.py +0 -0
  141. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/batch_review_service.py +0 -0
  142. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/bot_trigger.py +0 -0
  143. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/check_service.py +0 -0
  144. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/delegation_service.py +0 -0
  145. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/deps_service.py +0 -0
  146. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/documentation_receipt_service.py +0 -0
  147. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/__init__.py +0 -0
  148. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/_shared.py +0 -0
  149. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/batch.py +0 -0
  150. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/cleanup.py +0 -0
  151. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/core.py +0 -0
  152. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/done.py +0 -0
  153. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/draft_pr.py +0 -0
  154. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/lifecycle.py +0 -0
  155. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/sync.py +0 -0
  156. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/usage_tracking.py +0 -0
  157. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/__init__.py +0 -0
  158. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/auth.py +0 -0
  159. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/commands.py +0 -0
  160. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/config_io.py +0 -0
  161. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/manifest.py +0 -0
  162. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/migrations.py +0 -0
  163. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/prompts_ai.py +0 -0
  164. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/prompts_setup.py +0 -0
  165. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/shell.py +0 -0
  166. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/knowledge_recovery.py +0 -0
  167. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/knowledge_search.py +0 -0
  168. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/knowledge_service.py +0 -0
  169. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/prompt_delivery.py +0 -0
  170. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/review_cycle_service.py +0 -0
  171. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/review_record_service.py +0 -0
  172. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/review_service.py +0 -0
  173. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/review_settle.py +0 -0
  174. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/session_composition_service.py +0 -0
  175. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/skill_diagnostics_service.py +0 -0
  176. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/skill_invocation_service.py +0 -0
  177. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/smart_start.py +0 -0
  178. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/task_service.py +0 -0
  179. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/__init__.py +0 -0
  180. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/catalog.py +0 -0
  181. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/discovery.py +0 -0
  182. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/doc_targets.py +0 -0
  183. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/installer.py +0 -0
  184. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/pointer.py +0 -0
  185. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/resolver.py +0 -0
  186. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/validation.py +0 -0
  187. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/ui/__init__.py +0 -0
  188. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/ui/console.py +0 -0
  189. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/ui/prompts.py +0 -0
  190. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/__init__.py +0 -0
  191. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/body_markers.py +0 -0
  192. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/clipboard.py +0 -0
  193. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/conventional.py +0 -0
  194. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/filelock.py +0 -0
  195. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/gitref.py +0 -0
  196. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/http.py +0 -0
  197. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/install.py +0 -0
  198. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/knowledge_file.py +0 -0
  199. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/markdown.py +0 -0
  200. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/markers.py +0 -0
  201. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/paths.py +0 -0
  202. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/process.py +0 -0
  203. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/runtime_env.py +0 -0
  204. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/slug.py +0 -0
  205. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/stale_base.py +0 -0
  206. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/templates.py +0 -0
  207. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/terminal.py +0 -0
  208. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/token_usage_markdown.py +0 -0
  209. {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/update_check.py +0 -0
  210. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/agents-pointer.md +0 -0
  211. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/hooks/commit-msg +0 -0
  212. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/hooks/pre-commit +0 -0
  213. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/hooks/pre-push +0 -0
  214. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/deps-analysis.md +0 -0
  215. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/implement-context.md +0 -0
  216. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-batch.md +0 -0
  217. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-code.md +0 -0
  218. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-finding-admission.md +0 -0
  219. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-plan.md +0 -0
  220. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-pr-comments.md +0 -0
  221. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-batch.md +0 -0
  222. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-code.md +0 -0
  223. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-deps.md +0 -0
  224. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-full-branch.md +0 -0
  225. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-implementation.md +0 -0
  226. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-plan.md +0 -0
  227. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-pr-comments.md +0 -0
  228. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/session-start-implement.md +0 -0
  229. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/session-start-review.md +0 -0
  230. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/setup-worktree.sh.example +0 -0
  231. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/batch-review/SKILL.md +0 -0
  232. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/code-review/SKILL.md +0 -0
  233. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/dependency-analysis/SKILL.md +0 -0
  234. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/feedback-fix-review/SKILL.md +0 -0
  235. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/implementation/SKILL.md +0 -0
  236. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/knowledge/SKILL.md +0 -0
  237. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/plan-review/SKILL.md +0 -0
  238. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/planning/SKILL.md +0 -0
  239. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/review-comments/SKILL.md +0 -0
  240. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/task/SKILL.md +0 -0
  241. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/task/examples.md +0 -0
  242. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/task/plan-format.md +0 -0
  243. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/task/reference/session-summary-format.md +0 -0
  244. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/statusline-command.sh +0 -0
  245. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/_partials/completion.md +0 -0
  246. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/_partials/documentation-step.md +0 -0
  247. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/_partials/interaction-policy.md +0 -0
  248. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/_partials/knowledge-step.md +0 -0
  249. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/_partials/review-budget.md +0 -0
  250. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/implementation.md +0 -0
  251. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/documentation.md +0 -0
  252. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/new-plan.md +0 -0
  253. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/pr-summary-format.md +0 -0
  254. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/recovery.md +0 -0
  255. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/session-summary-format.md +0 -0
  256. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/tracking-issues.md +0 -0
  257. {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/review-pr-comments.md +0 -0
  258. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/__init__.py +0 -0
  259. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/concurrency/__init__.py +0 -0
  260. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/concurrency/test_batch_multi_pr.py +0 -0
  261. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/concurrency/test_knowledge_merge.py +0 -0
  262. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/concurrency/test_lock_retry.py +0 -0
  263. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/concurrency/test_stash_race.py +0 -0
  264. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/conftest.py +0 -0
  265. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/__init__.py +0 -0
  266. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/_support.py +0 -0
  267. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/conftest.py +0 -0
  268. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/mock_gh_script.py +0 -0
  269. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_admin_contract.py +0 -0
  270. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_check_contract.py +0 -0
  271. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_implement_work_done_contract.py +0 -0
  272. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_knowledge_contract.py +0 -0
  273. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_mock_gh_contract.py +0 -0
  274. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_review_contract.py +0 -0
  275. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_smart_start_contract.py +0 -0
  276. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_task_contract.py +0 -0
  277. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_work_sync_list_contract.py +0 -0
  278. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
  279. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
  280. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/transcripts/claude_session.txt +0 -0
  281. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/transcripts/codex_session.txt +0 -0
  282. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  283. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/transcripts/generic_session.txt +0 -0
  284. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/__init__.py +0 -0
  285. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_autostash.py +0 -0
  286. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_check.py +0 -0
  287. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_dynamic_skill_sessions.py +0 -0
  288. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_git.py +0 -0
  289. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_implementation_lifecycle.py +0 -0
  290. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_init.py +0 -0
  291. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_knowledge.py +0 -0
  292. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_markdown_provider.py +0 -0
  293. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_skill_context_budget.py +0 -0
  294. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_skill_install.py +0 -0
  295. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/live/__init__.py +0 -0
  296. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/live/test_wade_live_ai.py +0 -0
  297. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/live/test_wade_live_ai_taskr.py +0 -0
  298. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/live/test_wade_live_gh.py +0 -0
  299. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/test_cli_basics.py +0 -0
  300. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/__init__.py +0 -0
  301. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/conftest.py +0 -0
  302. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/__init__.py +0 -0
  303. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_autocomplete.py +0 -0
  304. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
  305. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_done_review_hint.py +0 -0
  306. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
  307. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_review_cli.py +0 -0
  308. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_session_subapps.py +0 -0
  309. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_shell_init.py +0 -0
  310. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_skills_session_cli.py +0 -0
  311. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_task_cli.py +0 -0
  312. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
  313. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_work_cli.py +0 -0
  314. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/__init__.py +0 -0
  315. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_bot_review_config.py +0 -0
  316. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_dynamic_skill_config.py +0 -0
  317. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_loader.py +0 -0
  318. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
  319. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_migrations.py +0 -0
  320. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  321. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_console.py +0 -0
  322. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_effort.py +0 -0
  323. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/__init__.py +0 -0
  324. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_all_patches_present.py +0 -0
  325. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_branch_list.py +0 -0
  326. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_branch_slugify.py +0 -0
  327. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_detached_worktree.py +0 -0
  328. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_is_merged_into.py +0 -0
  329. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_main_checkout_root.py +0 -0
  330. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_merge_count.py +0 -0
  331. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_pr_base.py +0 -0
  332. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_pr_lookup.py +0 -0
  333. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_pr_retry.py +0 -0
  334. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_pr_title.py +0 -0
  335. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_repo.py +0 -0
  336. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_reset_branch.py +0 -0
  337. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  338. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_stash_drop.py +0 -0
  339. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  340. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
  341. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_worktree_remove.py +0 -0
  342. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_hooks/__init__.py +0 -0
  343. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_hooks/test_hook_cli.py +0 -0
  344. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_hooks/test_policies.py +0 -0
  345. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
  346. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/__init__.py +0 -0
  347. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_batch.py +0 -0
  348. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_config_models.py +0 -0
  349. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_delegation.py +0 -0
  350. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_deps_models.py +0 -0
  351. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_deps_partition.py +0 -0
  352. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_review.py +0 -0
  353. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_review_expectation.py +0 -0
  354. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_task_models.py +0 -0
  355. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_workflow_models.py +0 -0
  356. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_providers/__init__.py +0 -0
  357. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_providers/test_clickup.py +0 -0
  358. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_providers/test_github.py +0 -0
  359. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_providers/test_github_pr.py +0 -0
  360. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_providers/test_markdown.py +0 -0
  361. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_scripts/__init__.py +0 -0
  362. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_scripts/test_changelog.py +0 -0
  363. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/__init__.py +0 -0
  364. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
  365. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_batch_pr_index.py +0 -0
  366. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_batch_review_service.py +0 -0
  367. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
  368. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
  369. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
  370. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
  371. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
  372. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bot_trigger.py +0 -0
  373. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_catchup.py +0 -0
  374. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
  375. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_check.py +0 -0
  376. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
  377. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
  378. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_delegation_service.py +0 -0
  379. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_deps_service.py +0 -0
  380. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_documentation_receipt.py +0 -0
  381. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_done_gates.py +0 -0
  382. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_done_idempotent.py +0 -0
  383. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_done_plan_flag.py +0 -0
  384. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
  385. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
  386. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
  387. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
  388. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
  389. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_implementation_service.py +0 -0
  390. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
  391. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_init.py +0 -0
  392. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  393. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
  394. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_knowledge_search.py +0 -0
  395. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_knowledge_service.py +0 -0
  396. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
  397. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_no_direct_git.py +0 -0
  398. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
  399. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
  400. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
  401. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_pr_summary_path.py +0 -0
  402. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
  403. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_preserve_session_data.py +0 -0
  404. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_prompt_delivery.py +0 -0
  405. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_push_recovery.py +0 -0
  406. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
  407. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_resume_autonomy.py +0 -0
  408. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_cycle_service.py +0 -0
  409. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_delegation_service.py +0 -0
  410. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_receipts.py +0 -0
  411. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_records.py +0 -0
  412. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_service.py +0 -0
  413. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_status_block.py +0 -0
  414. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_skill_diagnostics_service.py +0 -0
  415. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_skill_invocation_service.py +0 -0
  416. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_smart_start.py +0 -0
  417. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_smart_start_resume.py +0 -0
  418. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_stale_base_surface.py +0 -0
  419. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_sync_base_branch.py +0 -0
  420. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_task_service.py +0 -0
  421. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
  422. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
  423. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_doc_targets.py +0 -0
  424. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_generic_builtin_boundaries.py +0 -0
  425. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
  426. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
  427. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_pointer.py +0 -0
  428. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_review_budget_partial.py +0 -0
  429. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/__init__.py +0 -0
  430. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_body_markers.py +0 -0
  431. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_conventional.py +0 -0
  432. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_filelock.py +0 -0
  433. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_gitref.py +0 -0
  434. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_http.py +0 -0
  435. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_install.py +0 -0
  436. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_markdown.py +0 -0
  437. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_markers.py +0 -0
  438. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_plan_validation.py +0 -0
  439. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_process.py +0 -0
  440. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_prompts.py +0 -0
  441. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_runtime_env.py +0 -0
  442. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_slug.py +0 -0
  443. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_stale_base.py +0 -0
  444. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_terminal.py +0 -0
  445. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_terminal_launch.py +0 -0
  446. {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_update_check.py +0 -0
@@ -44,8 +44,7 @@ PR-SUMMARY.md
44
44
  .DS_Store
45
45
  Thumbs.db
46
46
 
47
- # uv
48
- uv.lock
47
+ # uv.lock is tracked for the published Crossby contract (#511).
49
48
 
50
49
  # Local archive (pre-reset export)
51
50
  archive/
@@ -92,6 +92,16 @@ No circular dependencies. Models are pure data. Services orchestrate. **Never im
92
92
 
93
93
  AI tool adapters are not part of this repo — they live in the external [`crossby`](https://github.com/ivanviragine/crossby) package (`pyproject.toml`). See `docs/dev/architecture.md` for what moved there.
94
94
 
95
+ Native planning prefers Crossby's ordinary interactive launch with native Plan
96
+ mode and supported approval flags. For deferred startup (currently Codex), WADE
97
+ handles Crossby's typed ready/submitted events and sends the task exactly once;
98
+ Crossby owns `/plan` and terminal mechanics. The public collected-session API
99
+ remains the fallback for adapters without terminal Plan support. WADE owns explicit file/stdin
100
+ handoff, review receipts bound to current content and frozen skills, validation,
101
+ knowledge handoff, and task persistence; native flags/protocols stay upstream.
102
+ Update the tracked `uv.lock` and Crossby contract tripwire with dependency
103
+ adoptions. Native plans are not transcripts; never scrape tool storage to find them.
104
+
95
105
  CLI modules are thin dispatch — they parse flags via Typer, then call service methods. Business logic lives in `services/`, not in `cli/`.
96
106
 
97
107
  > Full package structure, command dispatch, config system, and subsystem details: see `docs/dev/architecture.md`
@@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Conventional Commits](https://conventionalcommits.org/).
6
6
 
7
+ ## [v1.2.5] — 2026-09-16
8
+
9
+ ### Bug Fixes
10
+
11
+ - launch Codex native UI with deferred prompt delivery (#514) (8424a77)
12
+
13
+ ## [v1.2.4] — 2026-09-16
14
+
15
+ ### Bug Fixes
16
+
17
+ - restore native interactive planning for CLI tools (#513) (51ec787)
18
+
19
+ ## [v1.2.3] — 2026-09-15
20
+
21
+ ### Bug Fixes
22
+
23
+ - integrate Crossby native planning sessions (#512) (c58ea77)
24
+
7
25
  ## [v1.2.2] — 2026-09-09
8
26
 
9
27
  ### Bug Fixes
@@ -17,6 +17,10 @@ cd wade
17
17
  uv pip install -e ".[dev]"
18
18
  ```
19
19
 
20
+ `uv.lock` is tracked for reproducible dependency validation. When adopting a
21
+ Crossby release, update the declaration, lockfile and contract tripwire together;
22
+ use `uv sync --all-extras` to verify the installed release without a local override.
23
+
20
24
  ## Running Checks
21
25
 
22
26
  > Always use the scripts — never invoke `pytest`, `mypy`, or `ruff` directly.
@@ -28,7 +32,7 @@ uv pip install -e ".[dev]"
28
32
  | `./scripts/check.sh` | Lint + type-check |
29
33
  | `./scripts/check.sh --lint` | Lint only |
30
34
  | `./scripts/check.sh --types` | mypy strict only |
31
- | `./scripts/fmt.sh` | Auto-format in-place |
35
+ | `./scripts/fmt.sh [paths...]` | Auto-format selected paths (default: `src/`) |
32
36
  | `./scripts/check-all.sh` | Full suite (tests + lint + types) |
33
37
 
34
38
  ## Architecture
@@ -178,3 +178,15 @@
178
178
  {"dir": "stale", "event_id": "5fd6f7c8f26544249827eacae223694a", "id": "4d5fa933ffe6", "ts": "2026-09-08T18:20:11.796646+00:00"}
179
179
  {"dir": "stale", "event_id": "e4417aa5f0064b3f9c7e47f3fdae4ffe", "id": "8a9bfc96", "ts": "2026-09-08T19:15:19.450727+00:00"}
180
180
  {"dir": "stale", "event_id": "647e662229b04eb19f5a337d2c0a1d27", "id": "4d419ec6629c", "ts": "2026-09-08T19:15:19.602521+00:00"}
181
+ {"dir": "stale", "event_id": "d8b30c93957946b087bc118cf807859d", "id": "9f5e5e2c", "ts": "2026-09-15T12:40:24.351399+00:00"}
182
+ {"dir": "stale", "event_id": "23483fb102fb45a2bf60fbcb862110bd", "id": "2112b028ab73", "ts": "2026-09-15T12:40:24.525550+00:00"}
183
+ {"dir": "stale", "event_id": "857f1e42499144c5a2b7a7c44a277de9", "id": "c55057c13ebb", "ts": "2026-09-15T12:40:24.692975+00:00"}
184
+ {"dir": "up", "event_id": "79659f3434bd4bc8bf0e1dae2deae918", "id": "cb42b47b0a78", "ts": "2026-09-15T12:40:24.859865+00:00"}
185
+ {"dir": "up", "event_id": "d41302d8d7844cc1bf6008fb9e6b1b81", "id": "8ee8260b", "ts": "2026-09-15T12:40:25.034740+00:00"}
186
+ {"dir": "up", "event_id": "56ccbf428f61455292ebe28e7f6a5884", "id": "d7e3010043a2", "ts": "2026-09-15T12:40:25.199085+00:00"}
187
+ {"dir": "up", "event_id": "613813c3b5e24b75ab9b5296a35ada5f", "id": "9eacd93219c1", "ts": "2026-09-15T12:40:25.361743+00:00"}
188
+ {"dir": "up", "event_id": "d0fbb52cfa63456d81d455a83b7d0288", "id": "9f5e5e2c", "ts": "2026-09-15T15:24:18.473921+00:00"}
189
+ {"dir": "up", "event_id": "4cc96512911d4170b894daf7e3b8ffae", "id": "97d81e85", "ts": "2026-09-15T15:24:18.626569+00:00"}
190
+ {"dir": "up", "event_id": "66056751a7824f6bb780f4974e2e2d7d", "id": "b08abb58", "ts": "2026-09-15T15:24:18.781881+00:00"}
191
+ {"dir": "up", "event_id": "86b45a2f2bf74f0c8736e3ce9c7a7642", "id": "40a26d7cfd61", "ts": "2026-09-15T15:24:18.938217+00:00"}
192
+ {"dir": "stale", "event_id": "86da7ec333234953869f880b857ce682", "id": "6cd9b543", "ts": "2026-09-15T15:24:19.088735+00:00"}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: wade-cli
3
- Version: 1.2.2
3
+ Version: 1.2.5
4
4
  Summary: WADE — Workflow for AI-Driven Engineering
5
5
  Project-URL: Homepage, https://github.com/ivanviragine/wade
6
6
  Project-URL: Repository, https://github.com/ivanviragine/wade
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Topic :: Software Development :: Version Control :: Git
18
18
  Requires-Python: >=3.11
19
- Requires-Dist: crossby<0.30.0,>=0.29.0
19
+ Requires-Dist: crossby<0.34.0,>=0.33.0
20
20
  Requires-Dist: httpx<1.0,>=0.27
21
21
  Requires-Dist: pydantic-settings>=2.0
22
22
  Requires-Dist: pydantic>=2.0
@@ -209,8 +209,8 @@ wade plan ─▶ tasks + draft PRs ─▶ wade <N> ─▶ AI implements in an is
209
209
  `wade review pr-comments <N>`, and `wade cd <N>`.
210
210
  - **The AI runs** the session commands that enforce the workflow and open/update
211
211
  the PR: `wade implementation-session {check,sync,done}`,
212
- `wade review-pr-comments-session {check,sync,done,fetch,resolve}`, and
213
- `wade plan-session done`.
212
+ `wade review-pr-comments-session {check,sync,done,fetch,resolve}`. Native
213
+ planning returns an artifact; the parent runs its review and validation gates.
214
214
 
215
215
  ## Commands
216
216
 
@@ -273,19 +273,76 @@ These are invoked by the AI during a session — you normally don't run them by
273
273
  | `wade review-pr-comments-session fetch <N>` | Fetch unresolved PR review comments as markdown |
274
274
  | `wade review-pr-comments-session resolve <thread>` | Mark a PR review thread as resolved on GitHub |
275
275
  | `wade plan-session check` | Verify detached planning capabilities before writing plan artefacts or knowledge votes |
276
- | `wade plan-session done <plan_dir>` | Finalize a planning session |
276
+ | `wade plan-session done <plan_dir>` | Import an optional native plan (`--from-file` / `--from-stdin`), validate, and complete the reviewed handoff |
277
277
  | `wade deps-session check` | Verify the detached dependency-analysis runtime before writing output or staging a knowledge vote |
278
278
 
279
279
  Most workflow commands accept `--ai <tool>`, `--model <model>`, `--effort <level>`, `--permission-mode <tier>`, and `--yolo` to override configured defaults. `review pr-comments` additionally accepts `--effort none` to pin the tool default instead of a configured effort across a later wait/relaunch. `plan`, `implement`, and `review pr-comments` accept repeatable `--skill` and `--review-skill` methodology bindings plus `--refresh-skills` for an existing frozen session; `implement-batch` forwards the same binding request to every child session. Standalone plan/code/batch review and `task deps` accept repeatable `--skill`. `plan`, `implement`, `implement-batch`, standalone reviews (`review plan`, `review implementation`, `review batch`), `review pr-comments`, `task deps`, and the `wade <N>` shorthand also accept `--sandbox` / `--no-sandbox` (see [AI runtime sandbox profile](#ai-runtime-sandbox-profile)); batch and shorthand forward an explicit flag to the child session they launch. `implement` additionally supports `--detach` (new terminal tab), `--cd` (print worktree path only), and `--base <branch>` (see [Planning & base branches](#planning--base-branches)).
280
280
 
281
281
  ## Planning & base branches
282
282
 
283
- `wade plan` runs an AI planning session and then, from the validated plan files
284
- it produces, creates a lightweight task plus a draft PR for each one (labeled by
285
- complexity). Plan files are **strictly validated** before they become tasks — a
286
- `PLAN*.md` missing a valid `## Complexity` or a conventional-commit title is
287
- dropped with a loud error rather than silently becoming a task with no complexity
288
- label.
283
+ `wade plan` launches **Claude, Cursor, Copilot, OpenCode, Antigravity CLI, and Codex**
284
+ in their own interactive terminal, with **native Plan mode active before the
285
+ first task turn**. You keep the tool's UI, questions, and conversation. Crossby
286
+ validates native support and translates approval flags. For Codex, Crossby
287
+ submits `/plan` first and WADE sends the task on its ready event. Native questions
288
+ and subsequent interaction stay in the tool.
289
+
290
+ Use `--permission-mode` (or `--yolo`) for the native approval policy:
291
+
292
+ | CLI | Supported modes while planning |
293
+ |-----|--------------------------------|
294
+ | Claude | `default`, `auto`, `yolo` |
295
+ | Cursor | `default`, `auto`, `yolo` |
296
+ | Copilot | `default`, `accept-edits`, `yolo` |
297
+ | OpenCode | `default`, `yolo` |
298
+ | Antigravity CLI | `default`, `yolo` |
299
+ | Codex CLI | `default`, `accept-edits`, `auto`, `yolo` |
300
+
301
+ Unsupported combinations fail before creating a planning worktree. These are
302
+ native approval settings, not permission to implement the plan. The later
303
+ implementation offer still requires an explicit decision.
304
+
305
+ Where the tool supports a native output-directory setting (Claude), WADE uses
306
+ `.wade/plans/native/`. Other tools can keep their native location. Before exit, the planning
307
+ workflow submits it with `wade plan-session done .wade/plans --from-file <path>`;
308
+ `--from-stdin` accepts explicit Markdown when no file is available. WADE writes
309
+ its canonical copies. `wade review plan <file>` reviews those copies inside the
310
+ session; prompt-mode review emits the frozen method and requires actual
311
+ self-review followed by `--ack-self-review`. Run `done` again after review.
312
+ Changed content requires a current review before completion. A missing-review
313
+ error on the first import means the file was imported and awaits review.
314
+
315
+ One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
316
+ acceptance criteria). Multiple tasks use the explicit versioned
317
+ [plan bundle contract](templates/workflows/reference/plan-output-contract.md),
318
+ with filenames and `depends_on` relationships; headings do not imply task
319
+ boundaries. Knowledge-enabled sessions include `knowledge_votes` in that bundle,
320
+ including an explicit empty list when appropriate. The parent revalidates the
321
+ completed handoff after exit, then creates tasks and draft PRs. Failed or missing
322
+ handoffs retain output and create no tasks.
323
+
324
+ **Codex requires CLI 0.154.x and a POSIX terminal (macOS/Linux).** Crossby's
325
+ current startup adapter waits for the rendered Plan indicator before WADE sends
326
+ the initial task; unknown versions or an unrecognized startup screen fail
327
+ without retrying the task. This temporary terminal adapter can be replaced by a
328
+ native launch flag when Codex provides one. WADE requires the task-submitted
329
+ event before collecting the explicit reviewed handoff. Codex can submit plan
330
+ Markdown through `--from-stdin`; no native file destination is assumed.
331
+
332
+ All native terminals now use the ordinary sandbox default (off), including Codex;
333
+ use `--sandbox` or `ai.plan.sandbox: true` to retain confinement. The retained
334
+ collector fallback has its own safe default (on). Explicit `--sandbox`, `--network-access` /
335
+ `--no-network-access`, and `--trusted-dir` require support from the selected tool.
336
+ No network flag adds no network grant and does not promise isolation.
337
+ `--approval-policy on-request|untrusted|never` and `--timeout` are collector
338
+ settings; interactive terminals use `--permission-mode` and have no time limit.
339
+ Set `ai.plan.mode` to `interactive` or leave it unset for native terminals.
340
+ GUI launchers remain unsupported for planning.
341
+
342
+ Authentication, model availability, and successful handoff are runtime checks.
343
+ Native terminal output is retained for recovery; usage is reported only when
344
+ the adapter can extract it from that output. WADE's handoff ID is not a native
345
+ CLI session ID.
289
346
 
290
347
  `wade plan --issue <N>` re-plans an existing task. If the session produces a
291
348
  single plan file, it's attached to `#N` and the task stays open. If the
@@ -296,8 +353,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
296
353
  `--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
297
354
  left open with a warning instead of superseding on a partial split.
298
355
 
299
- Antigravity CLI (`agy`) planning sessions launch in normal file-writing mode within a guarded git planning worktree rather than `agy`'s native `--mode plan` (which sandboxes writes to its own per-conversation artifact store outside the worktree). WADE's plan-artifact guard strictly confines writes to `.wade/plans/` and scratch paths, preserving planning safety while generating real plan files. Antigravity CLI planning therefore requires a guarded git planning worktree.
300
-
301
356
  ### Base branch
302
357
 
303
358
  By default WADE branches from and merges into the project's configured main branch (`project.main_branch` in `.wade.yml`, falling back to the repo's detected default). To target a different branch — e.g. `develop` or a `release/*` branch — declare it once, at planning time, in an optional `## Base Branch` section of the plan file:
@@ -497,16 +552,17 @@ enough to pick up improvements, with no re-init or migration.
497
552
  | Worktree containment | Writes that land outside your worktree |
498
553
  | Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
499
554
  | Session completion | Finishing an implement/review session with unfinished work not yet run through `done` (nudges once) |
500
- | Plan completion | Finishing a `wade plan` session that produced no valid `PLAN*.md` yet (nudges once) |
555
+ | Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
501
556
 
502
557
  The session-completion guard keys on the same fact `done` records — a sha-keyed
503
558
  `.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
504
559
  when the branch has commits ahead of its base **and** `done` has not finalized
505
560
  the current commit. An early "stopping to ask a question" turn (no commits ahead)
506
- never triggers it. The plan-completion guard is the planning counterpart: it
507
- nudges once if a plan session is about to end with no valid plan file (a title
508
- with a conventional-commit prefix plus a `## Complexity`). Both fail **open** — a
509
- session is never trapped.
561
+ never triggers it. This Stop nudge fails **open**. Native planning does not
562
+ install the old file-based Stop nudge. Interactive sessions explicitly import,
563
+ review, and complete their plans before exit; the parent revalidates them. Codex
564
+ retains parent-side collection and review. Native transports may differ in hook
565
+ support; completion does not depend on hooks firing.
510
566
 
511
567
  Independently of that nudge, `wade plan` now **strictly validates** plan files
512
568
  before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
@@ -530,8 +586,8 @@ the label never fails task creation, and a body with no `## Complexity` section
530
586
  just skips it. An explicit `--label complexity:X` takes precedence over the body
531
587
  value, so the task never ends up with two conflicting complexity labels.
532
588
 
533
- If some files pass and others fail, an interactive run asks whether to continue
534
- with the valid ones; `--yolo` and non-interactive runs continue without asking.
589
+ If some files pass and others fail, a human must explicitly accept a
590
+ dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
535
591
  If you decline, or if every plan file fails validation, no tasks are created —
536
592
  the generated `PLAN*.md` are preserved to a temp directory so you can fix the
537
593
  reported errors and re-run instead of regenerating from scratch.
@@ -652,6 +708,10 @@ Description body here. Sub-headings, code blocks, anything markdown.
652
708
 
653
709
  ### Permission modes
654
710
 
711
+ These autonomy tiers apply to ordinary launches and supported native Plan
712
+ terminals. Codex planning retains parent-only default/YOLO with a separate
713
+ collector approval policy, as described above.
714
+
655
715
  `--permission-mode` sets how much autonomy the AI tool is granted — an axis
656
716
  independent of the delegation `--mode` (which controls *how* a tool is
657
717
  dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
@@ -661,16 +721,17 @@ dispatched: prompt/interactive/headless). The tiers, most→least permissive, ar
661
721
  |------|----------|
662
722
  | `default` | Prompt for every action (no autonomy grant). |
663
723
  | `accept-edits` | Auto-apply file edits; still prompt for shell/commands. Claude and Antigravity CLI. |
664
- | `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude only. |
724
+ | `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude and Cursor. |
665
725
  | `yolo` | Full autonomy — no prompts. |
666
726
 
667
727
  `--yolo` is a back-compat alias for `--permission-mode yolo`; an explicit
668
728
  `--permission-mode` wins when both are given. The same values are accepted in
669
729
  `.wade.yml` as `ai.permission_mode` (global) or `ai.<command>.permission_mode`
670
730
  (per-command), with `yolo: true` still honored as the alias. A tier a tool
671
- doesn't support is downgraded automatically (e.g. `auto` → `accept-edits` on
672
- non-Claude tools) with a warning — WADE forwards the requested tier and
673
- [`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder.
731
+ doesn't support is downgraded automatically for ordinary launches (for example,
732
+ `auto` → `accept-edits` when classifier auto is unavailable), with a warning — WADE forwards the requested tier and
733
+ [`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder. Native Plan combinations are validated strictly and
734
+ rejected if unsupported.
674
735
  **Headless launches are always read-only** — any of `deps` /
675
736
  `review_plan` / `review_implementation` / `review_batch` dispatched in headless
676
737
  delegation mode runs at `default` regardless of the configured tier, and no
@@ -713,6 +774,9 @@ failure feedback, and any truncation is labeled.
713
774
 
714
775
  ### AI runtime sandbox profile
715
776
 
777
+ The defaults below apply to **non-plan launches**. Native planning uses the
778
+ independent request policies described in [Planning & base branches](#planning--base-branches).
779
+
716
780
  `ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
717
781
  the **AI runtime** inside its own filesystem sandbox. It governs the external
718
782
  runtime boundary only — it never relaxes WADE's own guards (see below).
@@ -722,9 +786,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
722
786
  | `sandbox: false` (**default**) | Launch the runtime unrestricted. Codex gets `--sandbox danger-full-access`, Cursor `--sandbox disabled`. Repository commands and delegated child tools keep **normal host access and credentials**. |
723
787
  | `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
724
788
 
725
- Network access is **on in both profiles** and is no longer configurable — it is
726
- enabled for every WADE launch. Not every phase needs it (planning and
727
- dependency analysis deliberately do not), but the phases that do — `git
789
+ Network access is **on in both non-plan profiles** and is not configurable for
790
+ ordinary launches. Not every phase needs it (dependency analysis does not),
791
+ but the phases that do — `git
728
792
  fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
729
793
  is fixed at launch.
730
794
 
@@ -173,8 +173,8 @@ wade plan ─▶ tasks + draft PRs ─▶ wade <N> ─▶ AI implements in an is
173
173
  `wade review pr-comments <N>`, and `wade cd <N>`.
174
174
  - **The AI runs** the session commands that enforce the workflow and open/update
175
175
  the PR: `wade implementation-session {check,sync,done}`,
176
- `wade review-pr-comments-session {check,sync,done,fetch,resolve}`, and
177
- `wade plan-session done`.
176
+ `wade review-pr-comments-session {check,sync,done,fetch,resolve}`. Native
177
+ planning returns an artifact; the parent runs its review and validation gates.
178
178
 
179
179
  ## Commands
180
180
 
@@ -237,19 +237,76 @@ These are invoked by the AI during a session — you normally don't run them by
237
237
  | `wade review-pr-comments-session fetch <N>` | Fetch unresolved PR review comments as markdown |
238
238
  | `wade review-pr-comments-session resolve <thread>` | Mark a PR review thread as resolved on GitHub |
239
239
  | `wade plan-session check` | Verify detached planning capabilities before writing plan artefacts or knowledge votes |
240
- | `wade plan-session done <plan_dir>` | Finalize a planning session |
240
+ | `wade plan-session done <plan_dir>` | Import an optional native plan (`--from-file` / `--from-stdin`), validate, and complete the reviewed handoff |
241
241
  | `wade deps-session check` | Verify the detached dependency-analysis runtime before writing output or staging a knowledge vote |
242
242
 
243
243
  Most workflow commands accept `--ai <tool>`, `--model <model>`, `--effort <level>`, `--permission-mode <tier>`, and `--yolo` to override configured defaults. `review pr-comments` additionally accepts `--effort none` to pin the tool default instead of a configured effort across a later wait/relaunch. `plan`, `implement`, and `review pr-comments` accept repeatable `--skill` and `--review-skill` methodology bindings plus `--refresh-skills` for an existing frozen session; `implement-batch` forwards the same binding request to every child session. Standalone plan/code/batch review and `task deps` accept repeatable `--skill`. `plan`, `implement`, `implement-batch`, standalone reviews (`review plan`, `review implementation`, `review batch`), `review pr-comments`, `task deps`, and the `wade <N>` shorthand also accept `--sandbox` / `--no-sandbox` (see [AI runtime sandbox profile](#ai-runtime-sandbox-profile)); batch and shorthand forward an explicit flag to the child session they launch. `implement` additionally supports `--detach` (new terminal tab), `--cd` (print worktree path only), and `--base <branch>` (see [Planning & base branches](#planning--base-branches)).
244
244
 
245
245
  ## Planning & base branches
246
246
 
247
- `wade plan` runs an AI planning session and then, from the validated plan files
248
- it produces, creates a lightweight task plus a draft PR for each one (labeled by
249
- complexity). Plan files are **strictly validated** before they become tasks — a
250
- `PLAN*.md` missing a valid `## Complexity` or a conventional-commit title is
251
- dropped with a loud error rather than silently becoming a task with no complexity
252
- label.
247
+ `wade plan` launches **Claude, Cursor, Copilot, OpenCode, Antigravity CLI, and Codex**
248
+ in their own interactive terminal, with **native Plan mode active before the
249
+ first task turn**. You keep the tool's UI, questions, and conversation. Crossby
250
+ validates native support and translates approval flags. For Codex, Crossby
251
+ submits `/plan` first and WADE sends the task on its ready event. Native questions
252
+ and subsequent interaction stay in the tool.
253
+
254
+ Use `--permission-mode` (or `--yolo`) for the native approval policy:
255
+
256
+ | CLI | Supported modes while planning |
257
+ |-----|--------------------------------|
258
+ | Claude | `default`, `auto`, `yolo` |
259
+ | Cursor | `default`, `auto`, `yolo` |
260
+ | Copilot | `default`, `accept-edits`, `yolo` |
261
+ | OpenCode | `default`, `yolo` |
262
+ | Antigravity CLI | `default`, `yolo` |
263
+ | Codex CLI | `default`, `accept-edits`, `auto`, `yolo` |
264
+
265
+ Unsupported combinations fail before creating a planning worktree. These are
266
+ native approval settings, not permission to implement the plan. The later
267
+ implementation offer still requires an explicit decision.
268
+
269
+ Where the tool supports a native output-directory setting (Claude), WADE uses
270
+ `.wade/plans/native/`. Other tools can keep their native location. Before exit, the planning
271
+ workflow submits it with `wade plan-session done .wade/plans --from-file <path>`;
272
+ `--from-stdin` accepts explicit Markdown when no file is available. WADE writes
273
+ its canonical copies. `wade review plan <file>` reviews those copies inside the
274
+ session; prompt-mode review emits the frozen method and requires actual
275
+ self-review followed by `--ack-self-review`. Run `done` again after review.
276
+ Changed content requires a current review before completion. A missing-review
277
+ error on the first import means the file was imported and awaits review.
278
+
279
+ One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
280
+ acceptance criteria). Multiple tasks use the explicit versioned
281
+ [plan bundle contract](templates/workflows/reference/plan-output-contract.md),
282
+ with filenames and `depends_on` relationships; headings do not imply task
283
+ boundaries. Knowledge-enabled sessions include `knowledge_votes` in that bundle,
284
+ including an explicit empty list when appropriate. The parent revalidates the
285
+ completed handoff after exit, then creates tasks and draft PRs. Failed or missing
286
+ handoffs retain output and create no tasks.
287
+
288
+ **Codex requires CLI 0.154.x and a POSIX terminal (macOS/Linux).** Crossby's
289
+ current startup adapter waits for the rendered Plan indicator before WADE sends
290
+ the initial task; unknown versions or an unrecognized startup screen fail
291
+ without retrying the task. This temporary terminal adapter can be replaced by a
292
+ native launch flag when Codex provides one. WADE requires the task-submitted
293
+ event before collecting the explicit reviewed handoff. Codex can submit plan
294
+ Markdown through `--from-stdin`; no native file destination is assumed.
295
+
296
+ All native terminals now use the ordinary sandbox default (off), including Codex;
297
+ use `--sandbox` or `ai.plan.sandbox: true` to retain confinement. The retained
298
+ collector fallback has its own safe default (on). Explicit `--sandbox`, `--network-access` /
299
+ `--no-network-access`, and `--trusted-dir` require support from the selected tool.
300
+ No network flag adds no network grant and does not promise isolation.
301
+ `--approval-policy on-request|untrusted|never` and `--timeout` are collector
302
+ settings; interactive terminals use `--permission-mode` and have no time limit.
303
+ Set `ai.plan.mode` to `interactive` or leave it unset for native terminals.
304
+ GUI launchers remain unsupported for planning.
305
+
306
+ Authentication, model availability, and successful handoff are runtime checks.
307
+ Native terminal output is retained for recovery; usage is reported only when
308
+ the adapter can extract it from that output. WADE's handoff ID is not a native
309
+ CLI session ID.
253
310
 
254
311
  `wade plan --issue <N>` re-plans an existing task. If the session produces a
255
312
  single plan file, it's attached to `#N` and the task stays open. If the
@@ -260,8 +317,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
260
317
  `--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
261
318
  left open with a warning instead of superseding on a partial split.
262
319
 
263
- Antigravity CLI (`agy`) planning sessions launch in normal file-writing mode within a guarded git planning worktree rather than `agy`'s native `--mode plan` (which sandboxes writes to its own per-conversation artifact store outside the worktree). WADE's plan-artifact guard strictly confines writes to `.wade/plans/` and scratch paths, preserving planning safety while generating real plan files. Antigravity CLI planning therefore requires a guarded git planning worktree.
264
-
265
320
  ### Base branch
266
321
 
267
322
  By default WADE branches from and merges into the project's configured main branch (`project.main_branch` in `.wade.yml`, falling back to the repo's detected default). To target a different branch — e.g. `develop` or a `release/*` branch — declare it once, at planning time, in an optional `## Base Branch` section of the plan file:
@@ -461,16 +516,17 @@ enough to pick up improvements, with no re-init or migration.
461
516
  | Worktree containment | Writes that land outside your worktree |
462
517
  | Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
463
518
  | Session completion | Finishing an implement/review session with unfinished work not yet run through `done` (nudges once) |
464
- | Plan completion | Finishing a `wade plan` session that produced no valid `PLAN*.md` yet (nudges once) |
519
+ | Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
465
520
 
466
521
  The session-completion guard keys on the same fact `done` records — a sha-keyed
467
522
  `.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
468
523
  when the branch has commits ahead of its base **and** `done` has not finalized
469
524
  the current commit. An early "stopping to ask a question" turn (no commits ahead)
470
- never triggers it. The plan-completion guard is the planning counterpart: it
471
- nudges once if a plan session is about to end with no valid plan file (a title
472
- with a conventional-commit prefix plus a `## Complexity`). Both fail **open** — a
473
- session is never trapped.
525
+ never triggers it. This Stop nudge fails **open**. Native planning does not
526
+ install the old file-based Stop nudge. Interactive sessions explicitly import,
527
+ review, and complete their plans before exit; the parent revalidates them. Codex
528
+ retains parent-side collection and review. Native transports may differ in hook
529
+ support; completion does not depend on hooks firing.
474
530
 
475
531
  Independently of that nudge, `wade plan` now **strictly validates** plan files
476
532
  before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
@@ -494,8 +550,8 @@ the label never fails task creation, and a body with no `## Complexity` section
494
550
  just skips it. An explicit `--label complexity:X` takes precedence over the body
495
551
  value, so the task never ends up with two conflicting complexity labels.
496
552
 
497
- If some files pass and others fail, an interactive run asks whether to continue
498
- with the valid ones; `--yolo` and non-interactive runs continue without asking.
553
+ If some files pass and others fail, a human must explicitly accept a
554
+ dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
499
555
  If you decline, or if every plan file fails validation, no tasks are created —
500
556
  the generated `PLAN*.md` are preserved to a temp directory so you can fix the
501
557
  reported errors and re-run instead of regenerating from scratch.
@@ -616,6 +672,10 @@ Description body here. Sub-headings, code blocks, anything markdown.
616
672
 
617
673
  ### Permission modes
618
674
 
675
+ These autonomy tiers apply to ordinary launches and supported native Plan
676
+ terminals. Codex planning retains parent-only default/YOLO with a separate
677
+ collector approval policy, as described above.
678
+
619
679
  `--permission-mode` sets how much autonomy the AI tool is granted — an axis
620
680
  independent of the delegation `--mode` (which controls *how* a tool is
621
681
  dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
@@ -625,16 +685,17 @@ dispatched: prompt/interactive/headless). The tiers, most→least permissive, ar
625
685
  |------|----------|
626
686
  | `default` | Prompt for every action (no autonomy grant). |
627
687
  | `accept-edits` | Auto-apply file edits; still prompt for shell/commands. Claude and Antigravity CLI. |
628
- | `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude only. |
688
+ | `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude and Cursor. |
629
689
  | `yolo` | Full autonomy — no prompts. |
630
690
 
631
691
  `--yolo` is a back-compat alias for `--permission-mode yolo`; an explicit
632
692
  `--permission-mode` wins when both are given. The same values are accepted in
633
693
  `.wade.yml` as `ai.permission_mode` (global) or `ai.<command>.permission_mode`
634
694
  (per-command), with `yolo: true` still honored as the alias. A tier a tool
635
- doesn't support is downgraded automatically (e.g. `auto` → `accept-edits` on
636
- non-Claude tools) with a warning — WADE forwards the requested tier and
637
- [`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder.
695
+ doesn't support is downgraded automatically for ordinary launches (for example,
696
+ `auto` → `accept-edits` when classifier auto is unavailable), with a warning — WADE forwards the requested tier and
697
+ [`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder. Native Plan combinations are validated strictly and
698
+ rejected if unsupported.
638
699
  **Headless launches are always read-only** — any of `deps` /
639
700
  `review_plan` / `review_implementation` / `review_batch` dispatched in headless
640
701
  delegation mode runs at `default` regardless of the configured tier, and no
@@ -677,6 +738,9 @@ failure feedback, and any truncation is labeled.
677
738
 
678
739
  ### AI runtime sandbox profile
679
740
 
741
+ The defaults below apply to **non-plan launches**. Native planning uses the
742
+ independent request policies described in [Planning & base branches](#planning--base-branches).
743
+
680
744
  `ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
681
745
  the **AI runtime** inside its own filesystem sandbox. It governs the external
682
746
  runtime boundary only — it never relaxes WADE's own guards (see below).
@@ -686,9 +750,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
686
750
  | `sandbox: false` (**default**) | Launch the runtime unrestricted. Codex gets `--sandbox danger-full-access`, Cursor `--sandbox disabled`. Repository commands and delegated child tools keep **normal host access and credentials**. |
687
751
  | `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
688
752
 
689
- Network access is **on in both profiles** and is no longer configurable — it is
690
- enabled for every WADE launch. Not every phase needs it (planning and
691
- dependency analysis deliberately do not), but the phases that do — `git
753
+ Network access is **on in both non-plan profiles** and is not configurable for
754
+ ordinary launches. Not every phase needs it (dependency analysis does not),
755
+ but the phases that do — `git
692
756
  fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
693
757
  is fixed at launch.
694
758