wade-cli 1.2.2__tar.gz → 1.2.4__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 (445) hide show
  1. {wade_cli-1.2.2 → wade_cli-1.2.4}/.gitignore +1 -2
  2. {wade_cli-1.2.2 → wade_cli-1.2.4}/AGENTS.md +8 -0
  3. {wade_cli-1.2.2 → wade_cli-1.2.4}/CHANGELOG.md +12 -0
  4. {wade_cli-1.2.2 → wade_cli-1.2.4}/CONTRIBUTING.md +5 -1
  5. {wade_cli-1.2.2 → wade_cli-1.2.4}/KNOWLEDGE.ratings.jsonl +12 -0
  6. {wade_cli-1.2.2 → wade_cli-1.2.4}/PKG-INFO +86 -27
  7. {wade_cli-1.2.2 → wade_cli-1.2.4}/README.md +84 -25
  8. {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/architecture.md +105 -78
  9. wade_cli-1.2.4/docs/dev/crossby-native-planning-checkpoint.md +238 -0
  10. {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/extending.md +18 -0
  11. wade_cli-1.2.4/docs/dev/native-cli-plan-verification.md +56 -0
  12. {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/testing.md +66 -0
  13. {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/workflows-and-skills.md +17 -6
  14. {wade_cli-1.2.2 → wade_cli-1.2.4}/pyproject.toml +2 -2
  15. wade_cli-1.2.4/scripts/fmt.sh +7 -0
  16. wade_cli-1.2.4/scripts/probe_native_plan_handoff.py +118 -0
  17. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/__init__.py +1 -1
  18. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/main.py +38 -4
  19. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/plan_session.py +45 -1
  20. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/review.py +8 -0
  21. wade_cli-1.2.4/src/wade/models/interactive_plan.py +35 -0
  22. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/permission.py +1 -1
  23. wade_cli-1.2.4/src/wade/models/plan_bundle.py +64 -0
  24. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/task.py +5 -0
  25. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/workflow.py +3 -3
  26. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/ai_resolution.py +56 -11
  27. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/bootstrap.py +3 -6
  28. wade_cli-1.2.4/src/wade/services/interactive_plan_service.py +276 -0
  29. wade_cli-1.2.4/src/wade/services/native_plan_service.py +181 -0
  30. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/plan_service.py +479 -284
  31. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/review_delegation_service.py +42 -4
  32. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/materializer.py +9 -5
  33. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/plan_validation.py +35 -1
  34. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/safe_state.py +28 -6
  35. wade_cli-1.2.4/templates/prompts/plan-session.md +20 -0
  36. wade_cli-1.2.4/templates/prompts/session-start-plan.md +7 -0
  37. wade_cli-1.2.4/templates/workflows/plan.md +65 -0
  38. wade_cli-1.2.4/templates/workflows/reference/plan-output-contract.md +62 -0
  39. wade_cli-1.2.4/tests/e2e/test_plan_contract.py +349 -0
  40. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_hooks/test_session_start.py +7 -3
  41. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_permission_mode.py +22 -0
  42. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_ai_resolution.py +9 -1
  43. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_allowlist.py +3 -7
  44. wade_cli-1.2.4/tests/unit/test_services/test_interactive_plan_service.py +210 -0
  45. wade_cli-1.2.4/tests/unit/test_services/test_native_plan_service.py +329 -0
  46. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_plan_service.py +665 -1015
  47. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_crossby_contract.py +40 -2
  48. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_dynamic_skills.py +8 -3
  49. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_yolo.py +18 -27
  50. wade_cli-1.2.4/uv.lock +1129 -0
  51. wade_cli-1.2.2/scripts/fmt.sh +0 -4
  52. wade_cli-1.2.2/templates/prompts/plan-session.md +0 -12
  53. wade_cli-1.2.2/templates/prompts/session-start-plan.md +0 -5
  54. wade_cli-1.2.2/templates/workflows/plan.md +0 -43
  55. wade_cli-1.2.2/templates/workflows/reference/plan-output-contract.md +0 -9
  56. wade_cli-1.2.2/tests/e2e/test_plan_contract.py +0 -230
  57. {wade_cli-1.2.2 → wade_cli-1.2.4}/.gitattributes +0 -0
  58. {wade_cli-1.2.2 → wade_cli-1.2.4}/.github/workflows/auto-version.yml +0 -0
  59. {wade_cli-1.2.2 → wade_cli-1.2.4}/.github/workflows/ci.yml +0 -0
  60. {wade_cli-1.2.2 → wade_cli-1.2.4}/.github/workflows/pr-title-lint.yml +0 -0
  61. {wade_cli-1.2.2 → wade_cli-1.2.4}/.github/workflows/publish.yml +0 -0
  62. {wade_cli-1.2.2 → wade_cli-1.2.4}/.github/workflows/release.yml +0 -0
  63. {wade_cli-1.2.2 → wade_cli-1.2.4}/.pre-commit-config.yaml +0 -0
  64. {wade_cli-1.2.2 → wade_cli-1.2.4}/.wade.yml +0 -0
  65. {wade_cli-1.2.2 → wade_cli-1.2.4}/KNOWLEDGE.md +0 -0
  66. {wade_cli-1.2.2 → wade_cli-1.2.4}/assets/wade.png +0 -0
  67. {wade_cli-1.2.2 → wade_cli-1.2.4}/docker-compose.e2e.yml +0 -0
  68. {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/documentation-policies.md +0 -0
  69. {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/skills-system.md +0 -0
  70. {wade_cli-1.2.2 → wade_cli-1.2.4}/install.sh +0 -0
  71. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/auto_version.py +0 -0
  72. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/changelog.py +0 -0
  73. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/check-all.sh +0 -0
  74. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/check.sh +0 -0
  75. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/hooks/pre-push +0 -0
  76. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/install-hooks.sh +0 -0
  77. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/release.sh +0 -0
  78. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/setup-worktree.sh +0 -0
  79. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-concurrency.sh +0 -0
  80. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-e2e-docker.sh +0 -0
  81. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-e2e.sh +0 -0
  82. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-live-ai-taskr.sh +0 -0
  83. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-live-ai.sh +0 -0
  84. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-live-gh.sh +0 -0
  85. {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test.sh +0 -0
  86. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/__main__.py +0 -0
  87. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/__init__.py +0 -0
  88. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/admin.py +0 -0
  89. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/autocomplete.py +0 -0
  90. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/deps_session.py +0 -0
  91. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/hook.py +0 -0
  92. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/implementation_session.py +0 -0
  93. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/knowledge.py +0 -0
  94. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/review_pr_comments_session.py +0 -0
  95. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/session.py +0 -0
  96. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/session_shared.py +0 -0
  97. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/skills.py +0 -0
  98. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/task.py +0 -0
  99. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/worktree.py +0 -0
  100. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/config/__init__.py +0 -0
  101. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/config/loader.py +0 -0
  102. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/config/migrations.py +0 -0
  103. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/config/schema.py +0 -0
  104. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/__init__.py +0 -0
  105. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/branch.py +0 -0
  106. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/hooks.py +0 -0
  107. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/pr.py +0 -0
  108. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/repo.py +0 -0
  109. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/stash.py +0 -0
  110. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/sync.py +0 -0
  111. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/worktree.py +0 -0
  112. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/hooks/__init__.py +0 -0
  113. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/hooks/cli.py +0 -0
  114. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/hooks/policies.py +0 -0
  115. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/logging/__init__.py +0 -0
  116. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/logging/context.py +0 -0
  117. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/logging/setup.py +0 -0
  118. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/__init__.py +0 -0
  119. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/batch.py +0 -0
  120. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/config.py +0 -0
  121. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/delegation.py +0 -0
  122. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/deps.py +0 -0
  123. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/events.py +0 -0
  124. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/hooks.py +0 -0
  125. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/readiness.py +0 -0
  126. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/review.py +0 -0
  127. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/review_cycle.py +0 -0
  128. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/session.py +0 -0
  129. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/session_manifest.py +0 -0
  130. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/skill.py +0 -0
  131. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/worktree.py +0 -0
  132. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/__init__.py +0 -0
  133. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/_pr_delegate.py +0 -0
  134. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/base.py +0 -0
  135. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/clickup.py +0 -0
  136. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/github.py +0 -0
  137. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/markdown.py +0 -0
  138. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/registry.py +0 -0
  139. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/__init__.py +0 -0
  140. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/batch_review_service.py +0 -0
  141. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/bot_trigger.py +0 -0
  142. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/check_service.py +0 -0
  143. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/delegation_service.py +0 -0
  144. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/deps_service.py +0 -0
  145. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/documentation_receipt_service.py +0 -0
  146. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/__init__.py +0 -0
  147. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/_shared.py +0 -0
  148. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/batch.py +0 -0
  149. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/cleanup.py +0 -0
  150. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/core.py +0 -0
  151. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/done.py +0 -0
  152. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/draft_pr.py +0 -0
  153. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/lifecycle.py +0 -0
  154. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/sync.py +0 -0
  155. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/usage_tracking.py +0 -0
  156. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/__init__.py +0 -0
  157. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/auth.py +0 -0
  158. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/commands.py +0 -0
  159. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/config_io.py +0 -0
  160. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/manifest.py +0 -0
  161. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/migrations.py +0 -0
  162. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/prompts_ai.py +0 -0
  163. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/prompts_setup.py +0 -0
  164. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/shell.py +0 -0
  165. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/knowledge_recovery.py +0 -0
  166. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/knowledge_search.py +0 -0
  167. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/knowledge_service.py +0 -0
  168. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/prompt_delivery.py +0 -0
  169. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/review_cycle_service.py +0 -0
  170. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/review_record_service.py +0 -0
  171. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/review_service.py +0 -0
  172. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/review_settle.py +0 -0
  173. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/session_composition_service.py +0 -0
  174. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/skill_diagnostics_service.py +0 -0
  175. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/skill_invocation_service.py +0 -0
  176. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/smart_start.py +0 -0
  177. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/task_service.py +0 -0
  178. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/__init__.py +0 -0
  179. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/catalog.py +0 -0
  180. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/discovery.py +0 -0
  181. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/doc_targets.py +0 -0
  182. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/installer.py +0 -0
  183. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/pointer.py +0 -0
  184. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/resolver.py +0 -0
  185. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/validation.py +0 -0
  186. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/ui/__init__.py +0 -0
  187. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/ui/console.py +0 -0
  188. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/ui/prompts.py +0 -0
  189. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/__init__.py +0 -0
  190. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/body_markers.py +0 -0
  191. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/clipboard.py +0 -0
  192. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/conventional.py +0 -0
  193. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/filelock.py +0 -0
  194. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/gitref.py +0 -0
  195. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/http.py +0 -0
  196. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/install.py +0 -0
  197. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/knowledge_file.py +0 -0
  198. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/markdown.py +0 -0
  199. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/markers.py +0 -0
  200. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/paths.py +0 -0
  201. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/process.py +0 -0
  202. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/runtime_env.py +0 -0
  203. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/slug.py +0 -0
  204. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/stale_base.py +0 -0
  205. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/templates.py +0 -0
  206. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/terminal.py +0 -0
  207. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/token_usage_markdown.py +0 -0
  208. {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/update_check.py +0 -0
  209. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/agents-pointer.md +0 -0
  210. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/hooks/commit-msg +0 -0
  211. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/hooks/pre-commit +0 -0
  212. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/hooks/pre-push +0 -0
  213. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/deps-analysis.md +0 -0
  214. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/implement-context.md +0 -0
  215. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-batch.md +0 -0
  216. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-code.md +0 -0
  217. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-finding-admission.md +0 -0
  218. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-plan.md +0 -0
  219. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-pr-comments.md +0 -0
  220. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-batch.md +0 -0
  221. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-code.md +0 -0
  222. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-deps.md +0 -0
  223. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-full-branch.md +0 -0
  224. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-implementation.md +0 -0
  225. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-plan.md +0 -0
  226. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-pr-comments.md +0 -0
  227. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/session-start-implement.md +0 -0
  228. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/session-start-review.md +0 -0
  229. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/setup-worktree.sh.example +0 -0
  230. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/batch-review/SKILL.md +0 -0
  231. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/code-review/SKILL.md +0 -0
  232. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/dependency-analysis/SKILL.md +0 -0
  233. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/feedback-fix-review/SKILL.md +0 -0
  234. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/implementation/SKILL.md +0 -0
  235. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/knowledge/SKILL.md +0 -0
  236. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/plan-review/SKILL.md +0 -0
  237. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/planning/SKILL.md +0 -0
  238. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/review-comments/SKILL.md +0 -0
  239. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/task/SKILL.md +0 -0
  240. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/task/examples.md +0 -0
  241. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/task/plan-format.md +0 -0
  242. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/task/reference/session-summary-format.md +0 -0
  243. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/statusline-command.sh +0 -0
  244. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/_partials/completion.md +0 -0
  245. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/_partials/documentation-step.md +0 -0
  246. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/_partials/interaction-policy.md +0 -0
  247. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/_partials/knowledge-step.md +0 -0
  248. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/_partials/review-budget.md +0 -0
  249. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/implementation.md +0 -0
  250. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/documentation.md +0 -0
  251. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/new-plan.md +0 -0
  252. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/pr-summary-format.md +0 -0
  253. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/recovery.md +0 -0
  254. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/session-summary-format.md +0 -0
  255. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/tracking-issues.md +0 -0
  256. {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/review-pr-comments.md +0 -0
  257. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/__init__.py +0 -0
  258. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/concurrency/__init__.py +0 -0
  259. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/concurrency/test_batch_multi_pr.py +0 -0
  260. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/concurrency/test_knowledge_merge.py +0 -0
  261. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/concurrency/test_lock_retry.py +0 -0
  262. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/concurrency/test_stash_race.py +0 -0
  263. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/conftest.py +0 -0
  264. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/__init__.py +0 -0
  265. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/_support.py +0 -0
  266. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/conftest.py +0 -0
  267. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/mock_gh_script.py +0 -0
  268. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_admin_contract.py +0 -0
  269. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_check_contract.py +0 -0
  270. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_implement_work_done_contract.py +0 -0
  271. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_knowledge_contract.py +0 -0
  272. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_mock_gh_contract.py +0 -0
  273. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_review_contract.py +0 -0
  274. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_smart_start_contract.py +0 -0
  275. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_task_contract.py +0 -0
  276. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_work_sync_list_contract.py +0 -0
  277. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
  278. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
  279. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/transcripts/claude_session.txt +0 -0
  280. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/transcripts/codex_session.txt +0 -0
  281. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  282. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/transcripts/generic_session.txt +0 -0
  283. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/__init__.py +0 -0
  284. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_autostash.py +0 -0
  285. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_check.py +0 -0
  286. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_dynamic_skill_sessions.py +0 -0
  287. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_git.py +0 -0
  288. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_implementation_lifecycle.py +0 -0
  289. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_init.py +0 -0
  290. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_knowledge.py +0 -0
  291. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_markdown_provider.py +0 -0
  292. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_skill_context_budget.py +0 -0
  293. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_skill_install.py +0 -0
  294. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/live/__init__.py +0 -0
  295. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/live/test_wade_live_ai.py +0 -0
  296. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/live/test_wade_live_ai_taskr.py +0 -0
  297. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/live/test_wade_live_gh.py +0 -0
  298. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/test_cli_basics.py +0 -0
  299. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/__init__.py +0 -0
  300. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/conftest.py +0 -0
  301. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/__init__.py +0 -0
  302. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_autocomplete.py +0 -0
  303. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
  304. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_done_review_hint.py +0 -0
  305. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
  306. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_review_cli.py +0 -0
  307. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_session_subapps.py +0 -0
  308. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_shell_init.py +0 -0
  309. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_skills_session_cli.py +0 -0
  310. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_task_cli.py +0 -0
  311. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
  312. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_work_cli.py +0 -0
  313. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/__init__.py +0 -0
  314. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_bot_review_config.py +0 -0
  315. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_dynamic_skill_config.py +0 -0
  316. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_loader.py +0 -0
  317. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
  318. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_migrations.py +0 -0
  319. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  320. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_console.py +0 -0
  321. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_effort.py +0 -0
  322. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/__init__.py +0 -0
  323. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_all_patches_present.py +0 -0
  324. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_branch_list.py +0 -0
  325. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_branch_slugify.py +0 -0
  326. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_detached_worktree.py +0 -0
  327. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_is_merged_into.py +0 -0
  328. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_main_checkout_root.py +0 -0
  329. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_merge_count.py +0 -0
  330. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_pr_base.py +0 -0
  331. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_pr_lookup.py +0 -0
  332. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_pr_retry.py +0 -0
  333. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_pr_title.py +0 -0
  334. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_repo.py +0 -0
  335. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_reset_branch.py +0 -0
  336. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  337. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_stash_drop.py +0 -0
  338. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  339. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
  340. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_worktree_remove.py +0 -0
  341. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_hooks/__init__.py +0 -0
  342. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_hooks/test_hook_cli.py +0 -0
  343. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_hooks/test_policies.py +0 -0
  344. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
  345. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/__init__.py +0 -0
  346. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_batch.py +0 -0
  347. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_config_models.py +0 -0
  348. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_delegation.py +0 -0
  349. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_deps_models.py +0 -0
  350. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_deps_partition.py +0 -0
  351. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_review.py +0 -0
  352. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_review_expectation.py +0 -0
  353. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_task_models.py +0 -0
  354. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_workflow_models.py +0 -0
  355. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_providers/__init__.py +0 -0
  356. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_providers/test_clickup.py +0 -0
  357. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_providers/test_github.py +0 -0
  358. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_providers/test_github_pr.py +0 -0
  359. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_providers/test_markdown.py +0 -0
  360. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_scripts/__init__.py +0 -0
  361. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_scripts/test_changelog.py +0 -0
  362. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/__init__.py +0 -0
  363. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
  364. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_batch_pr_index.py +0 -0
  365. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_batch_review_service.py +0 -0
  366. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
  367. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
  368. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
  369. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
  370. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
  371. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bot_trigger.py +0 -0
  372. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_catchup.py +0 -0
  373. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
  374. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_check.py +0 -0
  375. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
  376. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
  377. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_delegation_service.py +0 -0
  378. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_deps_service.py +0 -0
  379. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_documentation_receipt.py +0 -0
  380. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_done_gates.py +0 -0
  381. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_done_idempotent.py +0 -0
  382. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_done_plan_flag.py +0 -0
  383. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
  384. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
  385. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
  386. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
  387. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
  388. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_implementation_service.py +0 -0
  389. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
  390. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_init.py +0 -0
  391. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  392. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
  393. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_knowledge_search.py +0 -0
  394. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_knowledge_service.py +0 -0
  395. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
  396. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_no_direct_git.py +0 -0
  397. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
  398. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
  399. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
  400. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_pr_summary_path.py +0 -0
  401. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
  402. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_preserve_session_data.py +0 -0
  403. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_prompt_delivery.py +0 -0
  404. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_push_recovery.py +0 -0
  405. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
  406. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_resume_autonomy.py +0 -0
  407. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_cycle_service.py +0 -0
  408. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_delegation_service.py +0 -0
  409. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_receipts.py +0 -0
  410. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_records.py +0 -0
  411. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_service.py +0 -0
  412. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_status_block.py +0 -0
  413. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_skill_diagnostics_service.py +0 -0
  414. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_skill_invocation_service.py +0 -0
  415. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_smart_start.py +0 -0
  416. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_smart_start_resume.py +0 -0
  417. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_stale_base_surface.py +0 -0
  418. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_sync_base_branch.py +0 -0
  419. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_task_service.py +0 -0
  420. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
  421. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
  422. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_doc_targets.py +0 -0
  423. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_generic_builtin_boundaries.py +0 -0
  424. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
  425. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
  426. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_pointer.py +0 -0
  427. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_review_budget_partial.py +0 -0
  428. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/__init__.py +0 -0
  429. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_body_markers.py +0 -0
  430. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_conventional.py +0 -0
  431. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_filelock.py +0 -0
  432. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_gitref.py +0 -0
  433. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_http.py +0 -0
  434. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_install.py +0 -0
  435. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_markdown.py +0 -0
  436. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_markers.py +0 -0
  437. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_plan_validation.py +0 -0
  438. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_process.py +0 -0
  439. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_prompts.py +0 -0
  440. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_runtime_env.py +0 -0
  441. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_slug.py +0 -0
  442. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_stale_base.py +0 -0
  443. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_terminal.py +0 -0
  444. {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_terminal_launch.py +0 -0
  445. {wade_cli-1.2.2 → wade_cli-1.2.4}/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,14 @@ 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. Tools without terminal Plan support (Codex)
97
+ retain the public collected-session/preflight API. WADE owns explicit file/stdin
98
+ handoff, review receipts bound to current content and frozen skills, validation,
99
+ knowledge handoff, and task persistence; native flags/protocols stay upstream.
100
+ Update the tracked `uv.lock` and Crossby contract tripwire with dependency
101
+ adoptions. Native plans are not transcripts; never scrape tool storage to find them.
102
+
95
103
  CLI modules are thin dispatch — they parse flags via Typer, then call service methods. Business logic lives in `services/`, not in `cli/`.
96
104
 
97
105
  > Full package structure, command dispatch, config system, and subsystem details: see `docs/dev/architecture.md`
@@ -4,6 +4,18 @@ 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.4] — 2026-09-16
8
+
9
+ ### Bug Fixes
10
+
11
+ - restore native interactive planning for CLI tools (#513) (51ec787)
12
+
13
+ ## [v1.2.3] — 2026-09-15
14
+
15
+ ### Bug Fixes
16
+
17
+ - integrate Crossby native planning sessions (#512) (c58ea77)
18
+
7
19
  ## [v1.2.2] — 2026-09-09
8
20
 
9
21
  ### 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.4
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.33.0,>=0.32.1
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,71 @@ 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, and Antigravity CLI**
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; WADE does not type
287
+ `/plan`, switch to an editing session, or replace the tool's questions.
288
+
289
+ Use `--permission-mode` (or `--yolo`) for the native approval policy:
290
+
291
+ | CLI | Supported modes while planning |
292
+ |-----|--------------------------------|
293
+ | Claude | `default`, `auto`, `yolo` |
294
+ | Cursor | `default`, `auto`, `yolo` |
295
+ | Copilot | `default`, `accept-edits`, `yolo` |
296
+ | OpenCode | `default`, `yolo` |
297
+ | Antigravity CLI | `default`, `yolo` |
298
+
299
+ Unsupported combinations fail before creating a planning worktree. These are
300
+ native approval settings, not permission to implement the plan. The later
301
+ implementation offer still requires an explicit decision.
302
+
303
+ Where the tool supports a native output-directory setting (Claude), WADE uses
304
+ `.wade/plans/native/`. Other tools can keep their native location. Before exit, the planning
305
+ workflow submits it with `wade plan-session done .wade/plans --from-file <path>`;
306
+ `--from-stdin` accepts explicit Markdown when no file is available. WADE writes
307
+ its canonical copies. `wade review plan <file>` reviews those copies inside the
308
+ session; prompt-mode review emits the frozen method and requires actual
309
+ self-review followed by `--ack-self-review`. Run `done` again after review.
310
+ Changed content requires a current review before completion. A missing-review
311
+ error on the first import means the file was imported and awaits review.
312
+
313
+ One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
314
+ acceptance criteria). Multiple tasks use the explicit versioned
315
+ [plan bundle contract](templates/workflows/reference/plan-output-contract.md),
316
+ with filenames and `depends_on` relationships; headings do not imply task
317
+ boundaries. Knowledge-enabled sessions include `knowledge_votes` in that bundle,
318
+ including an explicit empty list when appropriate. The parent revalidates the
319
+ completed handoff after exit, then creates tasks and draft PRs. Failed or missing
320
+ handoffs retain output and create no tasks.
321
+
322
+ **Codex keeps the collected-session path** for now: Crossby collects its native
323
+ plan artifact and questions, then WADE runs review and validation in the parent.
324
+ Its `--yolo` affects parent confirmations only; `auto` and `accept-edits` remain
325
+ unsupported. Codex's native session provenance is retained separately from the
326
+ plan; no transcript or token totals are invented from plan text.
327
+
328
+ Interactive terminals use the ordinary sandbox default (off); the Codex collector
329
+ keeps its safe default (on). Explicit `--sandbox`, `--network-access` /
330
+ `--no-network-access`, and `--trusted-dir` require support from the selected tool.
331
+ No network flag adds no network grant and does not promise isolation.
332
+ `--approval-policy on-request|untrusted|never` and `--timeout` are collector
333
+ settings; interactive terminals use `--permission-mode` and have no time limit.
334
+ Set `ai.plan.mode` to `interactive` or leave it unset for native terminals; leave
335
+ it unset for Codex. GUI launchers remain unsupported for planning.
336
+
337
+ Authentication, model availability, and successful handoff are runtime checks.
338
+ Native terminal output is retained for recovery; usage is reported only when
339
+ the adapter can extract it from that output. WADE's handoff ID is not a native
340
+ CLI session ID.
289
341
 
290
342
  `wade plan --issue <N>` re-plans an existing task. If the session produces a
291
343
  single plan file, it's attached to `#N` and the task stays open. If the
@@ -296,8 +348,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
296
348
  `--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
297
349
  left open with a warning instead of superseding on a partial split.
298
350
 
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
351
  ### Base branch
302
352
 
303
353
  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 +547,17 @@ enough to pick up improvements, with no re-init or migration.
497
547
  | Worktree containment | Writes that land outside your worktree |
498
548
  | Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
499
549
  | 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) |
550
+ | Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
501
551
 
502
552
  The session-completion guard keys on the same fact `done` records — a sha-keyed
503
553
  `.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
504
554
  when the branch has commits ahead of its base **and** `done` has not finalized
505
555
  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.
556
+ never triggers it. This Stop nudge fails **open**. Native planning does not
557
+ install the old file-based Stop nudge. Interactive sessions explicitly import,
558
+ review, and complete their plans before exit; the parent revalidates them. Codex
559
+ retains parent-side collection and review. Native transports may differ in hook
560
+ support; completion does not depend on hooks firing.
510
561
 
511
562
  Independently of that nudge, `wade plan` now **strictly validates** plan files
512
563
  before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
@@ -530,8 +581,8 @@ the label never fails task creation, and a body with no `## Complexity` section
530
581
  just skips it. An explicit `--label complexity:X` takes precedence over the body
531
582
  value, so the task never ends up with two conflicting complexity labels.
532
583
 
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.
584
+ If some files pass and others fail, a human must explicitly accept a
585
+ dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
535
586
  If you decline, or if every plan file fails validation, no tasks are created —
536
587
  the generated `PLAN*.md` are preserved to a temp directory so you can fix the
537
588
  reported errors and re-run instead of regenerating from scratch.
@@ -652,6 +703,10 @@ Description body here. Sub-headings, code blocks, anything markdown.
652
703
 
653
704
  ### Permission modes
654
705
 
706
+ These autonomy tiers apply to ordinary launches and supported native Plan
707
+ terminals. Codex planning retains parent-only default/YOLO with a separate
708
+ collector approval policy, as described above.
709
+
655
710
  `--permission-mode` sets how much autonomy the AI tool is granted — an axis
656
711
  independent of the delegation `--mode` (which controls *how* a tool is
657
712
  dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
@@ -661,16 +716,17 @@ dispatched: prompt/interactive/headless). The tiers, most→least permissive, ar
661
716
  |------|----------|
662
717
  | `default` | Prompt for every action (no autonomy grant). |
663
718
  | `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. |
719
+ | `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude and Cursor. |
665
720
  | `yolo` | Full autonomy — no prompts. |
666
721
 
667
722
  `--yolo` is a back-compat alias for `--permission-mode yolo`; an explicit
668
723
  `--permission-mode` wins when both are given. The same values are accepted in
669
724
  `.wade.yml` as `ai.permission_mode` (global) or `ai.<command>.permission_mode`
670
725
  (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.
726
+ doesn't support is downgraded automatically for ordinary launches (for example,
727
+ `auto` → `accept-edits` when classifier auto is unavailable), with a warning — WADE forwards the requested tier and
728
+ [`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder. Native Plan combinations are validated strictly and
729
+ rejected if unsupported.
674
730
  **Headless launches are always read-only** — any of `deps` /
675
731
  `review_plan` / `review_implementation` / `review_batch` dispatched in headless
676
732
  delegation mode runs at `default` regardless of the configured tier, and no
@@ -713,6 +769,9 @@ failure feedback, and any truncation is labeled.
713
769
 
714
770
  ### AI runtime sandbox profile
715
771
 
772
+ The defaults below apply to **non-plan launches**. Native planning uses the
773
+ independent request policies described in [Planning & base branches](#planning--base-branches).
774
+
716
775
  `ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
717
776
  the **AI runtime** inside its own filesystem sandbox. It governs the external
718
777
  runtime boundary only — it never relaxes WADE's own guards (see below).
@@ -722,9 +781,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
722
781
  | `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
782
  | `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
724
783
 
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
784
+ Network access is **on in both non-plan profiles** and is not configurable for
785
+ ordinary launches. Not every phase needs it (dependency analysis does not),
786
+ but the phases that do — `git
728
787
  fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
729
788
  is fixed at launch.
730
789
 
@@ -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,71 @@ 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, and Antigravity CLI**
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; WADE does not type
251
+ `/plan`, switch to an editing session, or replace the tool's questions.
252
+
253
+ Use `--permission-mode` (or `--yolo`) for the native approval policy:
254
+
255
+ | CLI | Supported modes while planning |
256
+ |-----|--------------------------------|
257
+ | Claude | `default`, `auto`, `yolo` |
258
+ | Cursor | `default`, `auto`, `yolo` |
259
+ | Copilot | `default`, `accept-edits`, `yolo` |
260
+ | OpenCode | `default`, `yolo` |
261
+ | Antigravity CLI | `default`, `yolo` |
262
+
263
+ Unsupported combinations fail before creating a planning worktree. These are
264
+ native approval settings, not permission to implement the plan. The later
265
+ implementation offer still requires an explicit decision.
266
+
267
+ Where the tool supports a native output-directory setting (Claude), WADE uses
268
+ `.wade/plans/native/`. Other tools can keep their native location. Before exit, the planning
269
+ workflow submits it with `wade plan-session done .wade/plans --from-file <path>`;
270
+ `--from-stdin` accepts explicit Markdown when no file is available. WADE writes
271
+ its canonical copies. `wade review plan <file>` reviews those copies inside the
272
+ session; prompt-mode review emits the frozen method and requires actual
273
+ self-review followed by `--ack-self-review`. Run `done` again after review.
274
+ Changed content requires a current review before completion. A missing-review
275
+ error on the first import means the file was imported and awaits review.
276
+
277
+ One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
278
+ acceptance criteria). Multiple tasks use the explicit versioned
279
+ [plan bundle contract](templates/workflows/reference/plan-output-contract.md),
280
+ with filenames and `depends_on` relationships; headings do not imply task
281
+ boundaries. Knowledge-enabled sessions include `knowledge_votes` in that bundle,
282
+ including an explicit empty list when appropriate. The parent revalidates the
283
+ completed handoff after exit, then creates tasks and draft PRs. Failed or missing
284
+ handoffs retain output and create no tasks.
285
+
286
+ **Codex keeps the collected-session path** for now: Crossby collects its native
287
+ plan artifact and questions, then WADE runs review and validation in the parent.
288
+ Its `--yolo` affects parent confirmations only; `auto` and `accept-edits` remain
289
+ unsupported. Codex's native session provenance is retained separately from the
290
+ plan; no transcript or token totals are invented from plan text.
291
+
292
+ Interactive terminals use the ordinary sandbox default (off); the Codex collector
293
+ keeps its safe default (on). Explicit `--sandbox`, `--network-access` /
294
+ `--no-network-access`, and `--trusted-dir` require support from the selected tool.
295
+ No network flag adds no network grant and does not promise isolation.
296
+ `--approval-policy on-request|untrusted|never` and `--timeout` are collector
297
+ settings; interactive terminals use `--permission-mode` and have no time limit.
298
+ Set `ai.plan.mode` to `interactive` or leave it unset for native terminals; leave
299
+ it unset for Codex. GUI launchers remain unsupported for planning.
300
+
301
+ Authentication, model availability, and successful handoff are runtime checks.
302
+ Native terminal output is retained for recovery; usage is reported only when
303
+ the adapter can extract it from that output. WADE's handoff ID is not a native
304
+ CLI session ID.
253
305
 
254
306
  `wade plan --issue <N>` re-plans an existing task. If the session produces a
255
307
  single plan file, it's attached to `#N` and the task stays open. If the
@@ -260,8 +312,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
260
312
  `--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
261
313
  left open with a warning instead of superseding on a partial split.
262
314
 
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
315
  ### Base branch
266
316
 
267
317
  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 +511,17 @@ enough to pick up improvements, with no re-init or migration.
461
511
  | Worktree containment | Writes that land outside your worktree |
462
512
  | Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
463
513
  | 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) |
514
+ | Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
465
515
 
466
516
  The session-completion guard keys on the same fact `done` records — a sha-keyed
467
517
  `.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
468
518
  when the branch has commits ahead of its base **and** `done` has not finalized
469
519
  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.
520
+ never triggers it. This Stop nudge fails **open**. Native planning does not
521
+ install the old file-based Stop nudge. Interactive sessions explicitly import,
522
+ review, and complete their plans before exit; the parent revalidates them. Codex
523
+ retains parent-side collection and review. Native transports may differ in hook
524
+ support; completion does not depend on hooks firing.
474
525
 
475
526
  Independently of that nudge, `wade plan` now **strictly validates** plan files
476
527
  before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
@@ -494,8 +545,8 @@ the label never fails task creation, and a body with no `## Complexity` section
494
545
  just skips it. An explicit `--label complexity:X` takes precedence over the body
495
546
  value, so the task never ends up with two conflicting complexity labels.
496
547
 
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.
548
+ If some files pass and others fail, a human must explicitly accept a
549
+ dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
499
550
  If you decline, or if every plan file fails validation, no tasks are created —
500
551
  the generated `PLAN*.md` are preserved to a temp directory so you can fix the
501
552
  reported errors and re-run instead of regenerating from scratch.
@@ -616,6 +667,10 @@ Description body here. Sub-headings, code blocks, anything markdown.
616
667
 
617
668
  ### Permission modes
618
669
 
670
+ These autonomy tiers apply to ordinary launches and supported native Plan
671
+ terminals. Codex planning retains parent-only default/YOLO with a separate
672
+ collector approval policy, as described above.
673
+
619
674
  `--permission-mode` sets how much autonomy the AI tool is granted — an axis
620
675
  independent of the delegation `--mode` (which controls *how* a tool is
621
676
  dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
@@ -625,16 +680,17 @@ dispatched: prompt/interactive/headless). The tiers, most→least permissive, ar
625
680
  |------|----------|
626
681
  | `default` | Prompt for every action (no autonomy grant). |
627
682
  | `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. |
683
+ | `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude and Cursor. |
629
684
  | `yolo` | Full autonomy — no prompts. |
630
685
 
631
686
  `--yolo` is a back-compat alias for `--permission-mode yolo`; an explicit
632
687
  `--permission-mode` wins when both are given. The same values are accepted in
633
688
  `.wade.yml` as `ai.permission_mode` (global) or `ai.<command>.permission_mode`
634
689
  (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.
690
+ doesn't support is downgraded automatically for ordinary launches (for example,
691
+ `auto` → `accept-edits` when classifier auto is unavailable), with a warning — WADE forwards the requested tier and
692
+ [`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder. Native Plan combinations are validated strictly and
693
+ rejected if unsupported.
638
694
  **Headless launches are always read-only** — any of `deps` /
639
695
  `review_plan` / `review_implementation` / `review_batch` dispatched in headless
640
696
  delegation mode runs at `default` regardless of the configured tier, and no
@@ -677,6 +733,9 @@ failure feedback, and any truncation is labeled.
677
733
 
678
734
  ### AI runtime sandbox profile
679
735
 
736
+ The defaults below apply to **non-plan launches**. Native planning uses the
737
+ independent request policies described in [Planning & base branches](#planning--base-branches).
738
+
680
739
  `ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
681
740
  the **AI runtime** inside its own filesystem sandbox. It governs the external
682
741
  runtime boundary only — it never relaxes WADE's own guards (see below).
@@ -686,9 +745,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
686
745
  | `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
746
  | `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
688
747
 
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
748
+ Network access is **on in both non-plan profiles** and is not configurable for
749
+ ordinary launches. Not every phase needs it (dependency analysis does not),
750
+ but the phases that do — `git
692
751
  fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
693
752
  is fixed at launch.
694
753