wade-cli 1.2.1__tar.gz → 1.2.3__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 (440) hide show
  1. {wade_cli-1.2.1 → wade_cli-1.2.3}/.gitignore +1 -2
  2. {wade_cli-1.2.1 → wade_cli-1.2.3}/AGENTS.md +6 -0
  3. {wade_cli-1.2.1 → wade_cli-1.2.3}/CHANGELOG.md +12 -23
  4. {wade_cli-1.2.1 → wade_cli-1.2.3}/CONTRIBUTING.md +5 -1
  5. {wade_cli-1.2.1 → wade_cli-1.2.3}/KNOWLEDGE.ratings.jsonl +12 -0
  6. {wade_cli-1.2.1 → wade_cli-1.2.3}/PKG-INFO +67 -23
  7. {wade_cli-1.2.1 → wade_cli-1.2.3}/README.md +65 -21
  8. {wade_cli-1.2.1 → wade_cli-1.2.3}/docs/dev/architecture.md +112 -78
  9. wade_cli-1.2.3/docs/dev/crossby-native-planning-checkpoint.md +238 -0
  10. {wade_cli-1.2.1 → wade_cli-1.2.3}/docs/dev/extending.md +18 -0
  11. {wade_cli-1.2.1 → wade_cli-1.2.3}/docs/dev/testing.md +36 -0
  12. {wade_cli-1.2.1 → wade_cli-1.2.3}/docs/dev/workflows-and-skills.md +8 -0
  13. {wade_cli-1.2.1 → wade_cli-1.2.3}/pyproject.toml +2 -2
  14. wade_cli-1.2.3/scripts/fmt.sh +7 -0
  15. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/__init__.py +1 -1
  16. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/main.py +37 -4
  17. wade_cli-1.2.3/src/wade/models/plan_bundle.py +64 -0
  18. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/task.py +5 -0
  19. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/workflow.py +3 -3
  20. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/ai_resolution.py +42 -11
  21. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/bootstrap.py +4 -6
  22. wade_cli-1.2.3/src/wade/services/native_plan_service.py +181 -0
  23. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/plan_service.py +365 -285
  24. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/review_delegation_service.py +3 -2
  25. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/review_service.py +24 -15
  26. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/skills/materializer.py +7 -5
  27. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/plan_validation.py +35 -1
  28. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/safe_state.py +25 -0
  29. wade_cli-1.2.3/templates/prompts/plan-session.md +17 -0
  30. wade_cli-1.2.3/templates/prompts/session-start-plan.md +6 -0
  31. wade_cli-1.2.3/templates/workflows/plan.md +53 -0
  32. wade_cli-1.2.3/templates/workflows/reference/plan-output-contract.md +51 -0
  33. wade_cli-1.2.3/tests/e2e/test_plan_contract.py +310 -0
  34. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/test_skill_install.py +1 -1
  35. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_hooks/test_session_start.py +5 -3
  36. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_permission_mode.py +21 -0
  37. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_ai_resolution.py +8 -1
  38. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_allowlist.py +3 -7
  39. wade_cli-1.2.3/tests/unit/test_services/test_native_plan_service.py +329 -0
  40. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_plan_service.py +556 -1018
  41. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_review_service.py +96 -10
  42. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_skills/test_crossby_contract.py +40 -2
  43. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_skills/test_dynamic_skills.py +6 -1
  44. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_yolo.py +9 -20
  45. wade_cli-1.2.3/uv.lock +1129 -0
  46. wade_cli-1.2.1/scripts/fmt.sh +0 -4
  47. wade_cli-1.2.1/templates/prompts/plan-session.md +0 -12
  48. wade_cli-1.2.1/templates/prompts/session-start-plan.md +0 -5
  49. wade_cli-1.2.1/templates/workflows/plan.md +0 -43
  50. wade_cli-1.2.1/templates/workflows/reference/plan-output-contract.md +0 -9
  51. wade_cli-1.2.1/tests/e2e/test_plan_contract.py +0 -230
  52. {wade_cli-1.2.1 → wade_cli-1.2.3}/.gitattributes +0 -0
  53. {wade_cli-1.2.1 → wade_cli-1.2.3}/.github/workflows/auto-version.yml +0 -0
  54. {wade_cli-1.2.1 → wade_cli-1.2.3}/.github/workflows/ci.yml +0 -0
  55. {wade_cli-1.2.1 → wade_cli-1.2.3}/.github/workflows/pr-title-lint.yml +0 -0
  56. {wade_cli-1.2.1 → wade_cli-1.2.3}/.github/workflows/publish.yml +0 -0
  57. {wade_cli-1.2.1 → wade_cli-1.2.3}/.github/workflows/release.yml +0 -0
  58. {wade_cli-1.2.1 → wade_cli-1.2.3}/.pre-commit-config.yaml +0 -0
  59. {wade_cli-1.2.1 → wade_cli-1.2.3}/.wade.yml +0 -0
  60. {wade_cli-1.2.1 → wade_cli-1.2.3}/KNOWLEDGE.md +0 -0
  61. {wade_cli-1.2.1 → wade_cli-1.2.3}/assets/wade.png +0 -0
  62. {wade_cli-1.2.1 → wade_cli-1.2.3}/docker-compose.e2e.yml +0 -0
  63. {wade_cli-1.2.1 → wade_cli-1.2.3}/docs/dev/documentation-policies.md +0 -0
  64. {wade_cli-1.2.1 → wade_cli-1.2.3}/docs/dev/skills-system.md +0 -0
  65. {wade_cli-1.2.1 → wade_cli-1.2.3}/install.sh +0 -0
  66. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/auto_version.py +0 -0
  67. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/changelog.py +0 -0
  68. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/check-all.sh +0 -0
  69. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/check.sh +0 -0
  70. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/hooks/pre-push +0 -0
  71. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/install-hooks.sh +0 -0
  72. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/release.sh +0 -0
  73. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/setup-worktree.sh +0 -0
  74. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/test-concurrency.sh +0 -0
  75. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/test-e2e-docker.sh +0 -0
  76. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/test-e2e.sh +0 -0
  77. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/test-live-ai-taskr.sh +0 -0
  78. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/test-live-ai.sh +0 -0
  79. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/test-live-gh.sh +0 -0
  80. {wade_cli-1.2.1 → wade_cli-1.2.3}/scripts/test.sh +0 -0
  81. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/__main__.py +0 -0
  82. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/__init__.py +0 -0
  83. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/admin.py +0 -0
  84. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/autocomplete.py +0 -0
  85. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/deps_session.py +0 -0
  86. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/hook.py +0 -0
  87. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/implementation_session.py +0 -0
  88. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/knowledge.py +0 -0
  89. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/plan_session.py +0 -0
  90. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/review.py +0 -0
  91. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/review_pr_comments_session.py +0 -0
  92. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/session.py +0 -0
  93. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/session_shared.py +0 -0
  94. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/skills.py +0 -0
  95. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/task.py +0 -0
  96. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/cli/worktree.py +0 -0
  97. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/config/__init__.py +0 -0
  98. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/config/loader.py +0 -0
  99. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/config/migrations.py +0 -0
  100. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/config/schema.py +0 -0
  101. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/git/__init__.py +0 -0
  102. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/git/branch.py +0 -0
  103. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/git/hooks.py +0 -0
  104. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/git/pr.py +0 -0
  105. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/git/repo.py +0 -0
  106. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/git/stash.py +0 -0
  107. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/git/sync.py +0 -0
  108. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/git/worktree.py +0 -0
  109. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/hooks/__init__.py +0 -0
  110. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/hooks/cli.py +0 -0
  111. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/hooks/policies.py +0 -0
  112. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/logging/__init__.py +0 -0
  113. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/logging/context.py +0 -0
  114. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/logging/setup.py +0 -0
  115. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/__init__.py +0 -0
  116. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/batch.py +0 -0
  117. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/config.py +0 -0
  118. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/delegation.py +0 -0
  119. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/deps.py +0 -0
  120. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/events.py +0 -0
  121. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/hooks.py +0 -0
  122. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/permission.py +0 -0
  123. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/readiness.py +0 -0
  124. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/review.py +0 -0
  125. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/review_cycle.py +0 -0
  126. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/session.py +0 -0
  127. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/session_manifest.py +0 -0
  128. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/skill.py +0 -0
  129. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/models/worktree.py +0 -0
  130. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/providers/__init__.py +0 -0
  131. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/providers/_pr_delegate.py +0 -0
  132. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/providers/base.py +0 -0
  133. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/providers/clickup.py +0 -0
  134. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/providers/github.py +0 -0
  135. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/providers/markdown.py +0 -0
  136. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/providers/registry.py +0 -0
  137. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/__init__.py +0 -0
  138. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/batch_review_service.py +0 -0
  139. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/bot_trigger.py +0 -0
  140. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/check_service.py +0 -0
  141. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/delegation_service.py +0 -0
  142. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/deps_service.py +0 -0
  143. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/documentation_receipt_service.py +0 -0
  144. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/__init__.py +0 -0
  145. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/_shared.py +0 -0
  146. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/batch.py +0 -0
  147. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/cleanup.py +0 -0
  148. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/core.py +0 -0
  149. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/done.py +0 -0
  150. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/draft_pr.py +0 -0
  151. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/lifecycle.py +0 -0
  152. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/sync.py +0 -0
  153. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/implementation_service/usage_tracking.py +0 -0
  154. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/init_service/__init__.py +0 -0
  155. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/init_service/auth.py +0 -0
  156. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/init_service/commands.py +0 -0
  157. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/init_service/config_io.py +0 -0
  158. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/init_service/manifest.py +0 -0
  159. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/init_service/migrations.py +0 -0
  160. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/init_service/prompts_ai.py +0 -0
  161. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/init_service/prompts_setup.py +0 -0
  162. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/init_service/shell.py +0 -0
  163. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/knowledge_recovery.py +0 -0
  164. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/knowledge_search.py +0 -0
  165. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/knowledge_service.py +0 -0
  166. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/prompt_delivery.py +0 -0
  167. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/review_cycle_service.py +0 -0
  168. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/review_record_service.py +0 -0
  169. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/review_settle.py +0 -0
  170. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/session_composition_service.py +0 -0
  171. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/skill_diagnostics_service.py +0 -0
  172. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/skill_invocation_service.py +0 -0
  173. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/smart_start.py +0 -0
  174. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/services/task_service.py +0 -0
  175. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/skills/__init__.py +0 -0
  176. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/skills/catalog.py +0 -0
  177. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/skills/discovery.py +0 -0
  178. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/skills/doc_targets.py +0 -0
  179. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/skills/installer.py +0 -0
  180. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/skills/pointer.py +0 -0
  181. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/skills/resolver.py +0 -0
  182. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/skills/validation.py +0 -0
  183. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/ui/__init__.py +0 -0
  184. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/ui/console.py +0 -0
  185. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/ui/prompts.py +0 -0
  186. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/__init__.py +0 -0
  187. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/body_markers.py +0 -0
  188. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/clipboard.py +0 -0
  189. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/conventional.py +0 -0
  190. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/filelock.py +0 -0
  191. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/gitref.py +0 -0
  192. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/http.py +0 -0
  193. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/install.py +0 -0
  194. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/knowledge_file.py +0 -0
  195. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/markdown.py +0 -0
  196. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/markers.py +0 -0
  197. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/paths.py +0 -0
  198. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/process.py +0 -0
  199. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/runtime_env.py +0 -0
  200. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/slug.py +0 -0
  201. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/stale_base.py +0 -0
  202. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/templates.py +0 -0
  203. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/terminal.py +0 -0
  204. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/token_usage_markdown.py +0 -0
  205. {wade_cli-1.2.1 → wade_cli-1.2.3}/src/wade/utils/update_check.py +0 -0
  206. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/agents-pointer.md +0 -0
  207. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/hooks/commit-msg +0 -0
  208. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/hooks/pre-commit +0 -0
  209. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/hooks/pre-push +0 -0
  210. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/deps-analysis.md +0 -0
  211. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/implement-context.md +0 -0
  212. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-batch.md +0 -0
  213. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-code.md +0 -0
  214. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-finding-admission.md +0 -0
  215. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-plan.md +0 -0
  216. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-pr-comments.md +0 -0
  217. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-result-batch.md +0 -0
  218. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-result-code.md +0 -0
  219. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-result-deps.md +0 -0
  220. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-result-full-branch.md +0 -0
  221. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-result-implementation.md +0 -0
  222. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-result-plan.md +0 -0
  223. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/review-result-pr-comments.md +0 -0
  224. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/session-start-implement.md +0 -0
  225. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/prompts/session-start-review.md +0 -0
  226. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/setup-worktree.sh.example +0 -0
  227. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/batch-review/SKILL.md +0 -0
  228. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/code-review/SKILL.md +0 -0
  229. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/dependency-analysis/SKILL.md +0 -0
  230. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/feedback-fix-review/SKILL.md +0 -0
  231. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/implementation/SKILL.md +0 -0
  232. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/knowledge/SKILL.md +0 -0
  233. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/plan-review/SKILL.md +0 -0
  234. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/planning/SKILL.md +0 -0
  235. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/review-comments/SKILL.md +0 -0
  236. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/task/SKILL.md +0 -0
  237. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/task/examples.md +0 -0
  238. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/task/plan-format.md +0 -0
  239. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/skills/task/reference/session-summary-format.md +0 -0
  240. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/statusline-command.sh +0 -0
  241. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/_partials/completion.md +0 -0
  242. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/_partials/documentation-step.md +0 -0
  243. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/_partials/interaction-policy.md +0 -0
  244. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/_partials/knowledge-step.md +0 -0
  245. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/_partials/review-budget.md +0 -0
  246. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/implementation.md +0 -0
  247. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/reference/documentation.md +0 -0
  248. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/reference/new-plan.md +0 -0
  249. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/reference/pr-summary-format.md +0 -0
  250. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/reference/recovery.md +0 -0
  251. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/reference/session-summary-format.md +0 -0
  252. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/reference/tracking-issues.md +0 -0
  253. {wade_cli-1.2.1 → wade_cli-1.2.3}/templates/workflows/review-pr-comments.md +0 -0
  254. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/__init__.py +0 -0
  255. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/concurrency/__init__.py +0 -0
  256. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/concurrency/test_batch_multi_pr.py +0 -0
  257. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/concurrency/test_knowledge_merge.py +0 -0
  258. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/concurrency/test_lock_retry.py +0 -0
  259. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/concurrency/test_stash_race.py +0 -0
  260. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/conftest.py +0 -0
  261. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/__init__.py +0 -0
  262. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/_support.py +0 -0
  263. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/conftest.py +0 -0
  264. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/mock_gh_script.py +0 -0
  265. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/test_admin_contract.py +0 -0
  266. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/test_check_contract.py +0 -0
  267. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/test_implement_work_done_contract.py +0 -0
  268. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/test_knowledge_contract.py +0 -0
  269. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/test_mock_gh_contract.py +0 -0
  270. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/test_review_contract.py +0 -0
  271. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/test_smart_start_contract.py +0 -0
  272. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/test_task_contract.py +0 -0
  273. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/e2e/test_work_sync_list_contract.py +0 -0
  274. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
  275. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
  276. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/fixtures/transcripts/claude_session.txt +0 -0
  277. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/fixtures/transcripts/codex_session.txt +0 -0
  278. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  279. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/fixtures/transcripts/generic_session.txt +0 -0
  280. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/__init__.py +0 -0
  281. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/test_autostash.py +0 -0
  282. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/test_check.py +0 -0
  283. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/test_dynamic_skill_sessions.py +0 -0
  284. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/test_git.py +0 -0
  285. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/test_implementation_lifecycle.py +0 -0
  286. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/test_init.py +0 -0
  287. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/test_knowledge.py +0 -0
  288. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/test_markdown_provider.py +0 -0
  289. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/integration/test_skill_context_budget.py +0 -0
  290. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/live/__init__.py +0 -0
  291. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/live/test_wade_live_ai.py +0 -0
  292. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/live/test_wade_live_ai_taskr.py +0 -0
  293. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/live/test_wade_live_gh.py +0 -0
  294. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/test_cli_basics.py +0 -0
  295. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/__init__.py +0 -0
  296. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/conftest.py +0 -0
  297. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/__init__.py +0 -0
  298. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_autocomplete.py +0 -0
  299. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
  300. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_done_review_hint.py +0 -0
  301. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
  302. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_review_cli.py +0 -0
  303. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_session_subapps.py +0 -0
  304. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_shell_init.py +0 -0
  305. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_skills_session_cli.py +0 -0
  306. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_task_cli.py +0 -0
  307. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
  308. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_cli/test_work_cli.py +0 -0
  309. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_config/__init__.py +0 -0
  310. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_config/test_bot_review_config.py +0 -0
  311. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_config/test_dynamic_skill_config.py +0 -0
  312. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_config/test_loader.py +0 -0
  313. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
  314. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_config/test_migrations.py +0 -0
  315. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  316. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_console.py +0 -0
  317. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_effort.py +0 -0
  318. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/__init__.py +0 -0
  319. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_all_patches_present.py +0 -0
  320. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_branch_list.py +0 -0
  321. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_branch_slugify.py +0 -0
  322. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_detached_worktree.py +0 -0
  323. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_is_merged_into.py +0 -0
  324. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_main_checkout_root.py +0 -0
  325. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_merge_count.py +0 -0
  326. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_pr_base.py +0 -0
  327. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_pr_lookup.py +0 -0
  328. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_pr_retry.py +0 -0
  329. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_pr_title.py +0 -0
  330. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_repo.py +0 -0
  331. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_reset_branch.py +0 -0
  332. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  333. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_stash_drop.py +0 -0
  334. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  335. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
  336. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_git/test_worktree_remove.py +0 -0
  337. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_hooks/__init__.py +0 -0
  338. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_hooks/test_hook_cli.py +0 -0
  339. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_hooks/test_policies.py +0 -0
  340. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
  341. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_models/__init__.py +0 -0
  342. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_models/test_batch.py +0 -0
  343. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_models/test_config_models.py +0 -0
  344. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_models/test_delegation.py +0 -0
  345. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_models/test_deps_models.py +0 -0
  346. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_models/test_deps_partition.py +0 -0
  347. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_models/test_review.py +0 -0
  348. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_models/test_review_expectation.py +0 -0
  349. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_models/test_task_models.py +0 -0
  350. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_models/test_workflow_models.py +0 -0
  351. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_providers/__init__.py +0 -0
  352. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_providers/test_clickup.py +0 -0
  353. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_providers/test_github.py +0 -0
  354. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_providers/test_github_pr.py +0 -0
  355. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_providers/test_markdown.py +0 -0
  356. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_scripts/__init__.py +0 -0
  357. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_scripts/test_changelog.py +0 -0
  358. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/__init__.py +0 -0
  359. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
  360. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_batch_pr_index.py +0 -0
  361. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_batch_review_service.py +0 -0
  362. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
  363. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
  364. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
  365. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
  366. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
  367. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_bot_trigger.py +0 -0
  368. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_catchup.py +0 -0
  369. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
  370. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_check.py +0 -0
  371. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
  372. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
  373. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_delegation_service.py +0 -0
  374. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_deps_service.py +0 -0
  375. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_documentation_receipt.py +0 -0
  376. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_done_gates.py +0 -0
  377. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_done_idempotent.py +0 -0
  378. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_done_plan_flag.py +0 -0
  379. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
  380. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
  381. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
  382. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
  383. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
  384. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_implementation_service.py +0 -0
  385. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
  386. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_init.py +0 -0
  387. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  388. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
  389. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_knowledge_search.py +0 -0
  390. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_knowledge_service.py +0 -0
  391. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
  392. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_no_direct_git.py +0 -0
  393. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
  394. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
  395. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
  396. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_pr_summary_path.py +0 -0
  397. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
  398. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_preserve_session_data.py +0 -0
  399. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_prompt_delivery.py +0 -0
  400. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_push_recovery.py +0 -0
  401. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
  402. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_resume_autonomy.py +0 -0
  403. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_review_cycle_service.py +0 -0
  404. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_review_delegation_service.py +0 -0
  405. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_review_receipts.py +0 -0
  406. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_review_records.py +0 -0
  407. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_review_status_block.py +0 -0
  408. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_skill_diagnostics_service.py +0 -0
  409. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_skill_invocation_service.py +0 -0
  410. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_smart_start.py +0 -0
  411. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_smart_start_resume.py +0 -0
  412. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_stale_base_surface.py +0 -0
  413. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_sync_base_branch.py +0 -0
  414. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_task_service.py +0 -0
  415. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
  416. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
  417. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_skills/test_doc_targets.py +0 -0
  418. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_skills/test_generic_builtin_boundaries.py +0 -0
  419. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
  420. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
  421. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_skills/test_pointer.py +0 -0
  422. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_skills/test_review_budget_partial.py +0 -0
  423. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/__init__.py +0 -0
  424. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_body_markers.py +0 -0
  425. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_conventional.py +0 -0
  426. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_filelock.py +0 -0
  427. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_gitref.py +0 -0
  428. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_http.py +0 -0
  429. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_install.py +0 -0
  430. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_markdown.py +0 -0
  431. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_markers.py +0 -0
  432. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_plan_validation.py +0 -0
  433. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_process.py +0 -0
  434. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_prompts.py +0 -0
  435. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_runtime_env.py +0 -0
  436. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_slug.py +0 -0
  437. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_stale_base.py +0 -0
  438. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_terminal.py +0 -0
  439. {wade_cli-1.2.1 → wade_cli-1.2.3}/tests/unit/test_utils/test_terminal_launch.py +0 -0
  440. {wade_cli-1.2.1 → wade_cli-1.2.3}/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,12 @@ 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 uses Crossby's public collected-session/preflight API, not the
96
+ ordinary launch/autonomy path. WADE owns bundle import, parent review/validation,
97
+ knowledge handoff and task persistence; native protocols and command-policy
98
+ translation stay upstream. Update the tracked `uv.lock` and Crossby contract
99
+ tripwire alongside a dependency adoption. Native plans are not transcripts.
100
+
95
101
  CLI modules are thin dispatch — they parse flags via Typer, then call service methods. Business logic lives in `services/`, not in `cli/`.
96
102
 
97
103
  > 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.3] — 2026-09-15
8
+
9
+ ### Bug Fixes
10
+
11
+ - integrate Crossby native planning sessions (#512) (c58ea77)
12
+
13
+ ## [v1.2.2] — 2026-09-09
14
+
15
+ ### Bug Fixes
16
+
17
+ - keep retained effort editable in PR-comment retry sessions (#507) (8daabc8)
18
+
7
19
  ## [v1.2.1] — 2026-09-08
8
20
 
9
21
  ### Chores
@@ -200,13 +212,6 @@ The format is based on [Conventional Commits](https://conventionalcommits.org/).
200
212
  ### Bug Fixes
201
213
 
202
214
  - propagate Codex worktree launch context through sessions (#429) (032daa2)
203
- - resolve branch by issue number so retitled issues resume their PR/plan (#428) (c840b5e)
204
-
205
- ## [v0.46.0] — 2026-08-16
206
-
207
- ### Bug Fixes
208
-
209
- - propagate Codex worktree launch context through sessions (3967453)
210
215
 
211
216
  ## [v0.45.10] — 2026-08-16
212
217
 
@@ -298,12 +303,6 @@ The format is based on [Conventional Commits](https://conventionalcommits.org/).
298
303
 
299
304
  - make WADE session output report-by-exception (terse on success) (#402) (9f96c94)
300
305
 
301
- ## [v0.43.1] — 2026-08-12
302
-
303
- ### Bug Fixes
304
-
305
- - surface stale base loudly and reconcile migration collisions at catchup (68150ef)
306
-
307
306
  ## [v0.43.0] — 2026-08-11
308
307
 
309
308
  ### Features
@@ -455,16 +454,6 @@ The format is based on [Conventional Commits](https://conventionalcommits.org/).
455
454
 
456
455
  - bump crossby to v0.11.0 and adopt newer models (Opus 5) (#345) (d9ac8a5)
457
456
 
458
- ## [v0.35.2] — 2026-07-24
459
-
460
- ### Bug Fixes
461
-
462
- - exclude scaffold-branch commits from generated changelog (c40a9ca)
463
-
464
- ### Chores
465
-
466
- - bump crossby to v0.11.0 and adopt newer models (Opus 5) (ff0ab48)
467
-
468
457
  ## [v0.35.1] — 2026-07-24
469
458
 
470
459
  ### 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.1
3
+ Version: 1.2.3
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.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,58 @@ 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>` | Validate materialized plans (not native collection or task persistence) |
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` enters the selected tool's **native Plan mode before the first task
284
+ turn**. Crossby collects one authoritative Markdown artifact; WADE imports its
285
+ plans, runs the fixed review and strict validation, then creates a lightweight
286
+ task plus a draft PR per accepted plan. It never substitutes `/plan`, an editing
287
+ session, or a hook for native activation.
288
+
289
+ One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
290
+ acceptance criteria). Multiple tasks use the explicit versioned
291
+ [plan bundle contract](templates/workflows/reference/plan-output-contract.md),
292
+ with filenames and `depends_on` relationships; headings do not imply task
293
+ boundaries. Knowledge-enabled sessions also use the bundle to return ratings.
294
+ The parent runs the frozen plan-review method; prompt-mode review needs actual
295
+ self-review and explicit acknowledgement, so it cannot complete noninteractively.
296
+ Review failures preserve output instead of creating tasks.
297
+
298
+ Planning has independent `--sandbox` / `--no-sandbox`,
299
+ `--network-access` / `--no-network-access`,
300
+ `--approval-policy on-request|untrusted|never`, repeatable `--trusted-dir`, and
301
+ `--timeout` (1–3600 seconds; default 600, or `ai.plan.timeout`) requirements.
302
+ Unset sandbox uses the collector's safe default; explicit confinement requires
303
+ public support and tool-managed behavior is not a confinement guarantee.
304
+ Unsupported policies, model/effort combinations, or `ai.plan.mode` transport
305
+ overrides fail clearly. `--yolo` affects only WADE's post-plan confirmations;
306
+ `auto` and `accept-edits` are rejected. The separate implementation offer still
307
+ requires explicit confirmation.
308
+
309
+ Omitting the network flag adds no network grant; it does not promise isolation
310
+ for an unrestricted or tool-managed runtime. Explicit `--no-network-access`
311
+ requires supported sandbox network control (and is rejected with `--no-sandbox`
312
+ in the adopted contract). WADE never drops that explicit restriction to enable
313
+ a collector.
314
+
315
+ Eligibility follows Crossby's complete-session metadata and bounded version
316
+ preflight after final tool selection, before worktree/provider mutations.
317
+ With the adopted release, Claude (attached terminal), Codex, and OpenCode support
318
+ WADE's required command policy. Cursor and Antigravity CLI are rejected until
319
+ their collectors support that policy; Copilot lacks native-question collection,
320
+ and GUI launchers are unsupported. This is not a permanent tool allowlist.
321
+ Authentication, model availability, protocol negotiation, and artifacts are
322
+ checked at runtime; static preflight does not promise them. Unavailable input
323
+ never supplies a native answer or permission grant.
324
+
325
+ Session IDs and exact native provenance are retained. The collection API does
326
+ not provide a full transcript or token usage; WADE reports them unavailable,
327
+ without substituting the plan text or fabricated usage totals.
289
328
 
290
329
  `wade plan --issue <N>` re-plans an existing task. If the session produces a
291
330
  single plan file, it's attached to `#N` and the task stays open. If the
@@ -296,8 +335,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
296
335
  `--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
297
336
  left open with a warning instead of superseding on a partial split.
298
337
 
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
338
  ### Base branch
302
339
 
303
340
  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 +534,17 @@ enough to pick up improvements, with no re-init or migration.
497
534
  | Worktree containment | Writes that land outside your worktree |
498
535
  | Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
499
536
  | 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) |
537
+ | Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
501
538
 
502
539
  The session-completion guard keys on the same fact `done` records — a sha-keyed
503
540
  `.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
504
541
  when the branch has commits ahead of its base **and** `done` has not finalized
505
542
  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.
543
+ never triggers it. This Stop nudge fails **open**. Native planning does not
544
+ install the old file-based Stop nudge: canonical files exist only after the
545
+ collector returns. Required review and validation now run in the parent.
546
+ Native transports may exclude ambient tool settings/hooks to preserve command
547
+ policy; hooks are defense in depth, not a native collection guarantee.
510
548
 
511
549
  Independently of that nudge, `wade plan` now **strictly validates** plan files
512
550
  before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
@@ -530,8 +568,8 @@ the label never fails task creation, and a body with no `## Complexity` section
530
568
  just skips it. An explicit `--label complexity:X` takes precedence over the body
531
569
  value, so the task never ends up with two conflicting complexity labels.
532
570
 
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.
571
+ If some files pass and others fail, a human must explicitly accept a
572
+ dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
535
573
  If you decline, or if every plan file fails validation, no tasks are created —
536
574
  the generated `PLAN*.md` are preserved to a temp directory so you can fix the
537
575
  reported errors and re-run instead of regenerating from scratch.
@@ -652,6 +690,9 @@ Description body here. Sub-headings, code blocks, anything markdown.
652
690
 
653
691
  ### Permission modes
654
692
 
693
+ These autonomy tiers apply to ordinary launches. Native `wade plan` is the
694
+ exception described above: default/YOLO control the parent, never the child.
695
+
655
696
  `--permission-mode` sets how much autonomy the AI tool is granted — an axis
656
697
  independent of the delegation `--mode` (which controls *how* a tool is
657
698
  dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
@@ -713,6 +754,9 @@ failure feedback, and any truncation is labeled.
713
754
 
714
755
  ### AI runtime sandbox profile
715
756
 
757
+ The defaults below apply to **non-plan launches**. Native planning uses the
758
+ independent request policies described in [Planning & base branches](#planning--base-branches).
759
+
716
760
  `ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
717
761
  the **AI runtime** inside its own filesystem sandbox. It governs the external
718
762
  runtime boundary only — it never relaxes WADE's own guards (see below).
@@ -722,9 +766,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
722
766
  | `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
767
  | `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
724
768
 
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
769
+ Network access is **on in both non-plan profiles** and is not configurable for
770
+ ordinary launches. Not every phase needs it (dependency analysis does not),
771
+ but the phases that do — `git
728
772
  fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
729
773
  is fixed at launch.
730
774
 
@@ -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,58 @@ 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>` | Validate materialized plans (not native collection or task persistence) |
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` enters the selected tool's **native Plan mode before the first task
248
+ turn**. Crossby collects one authoritative Markdown artifact; WADE imports its
249
+ plans, runs the fixed review and strict validation, then creates a lightweight
250
+ task plus a draft PR per accepted plan. It never substitutes `/plan`, an editing
251
+ session, or a hook for native activation.
252
+
253
+ One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
254
+ acceptance criteria). Multiple tasks use the explicit versioned
255
+ [plan bundle contract](templates/workflows/reference/plan-output-contract.md),
256
+ with filenames and `depends_on` relationships; headings do not imply task
257
+ boundaries. Knowledge-enabled sessions also use the bundle to return ratings.
258
+ The parent runs the frozen plan-review method; prompt-mode review needs actual
259
+ self-review and explicit acknowledgement, so it cannot complete noninteractively.
260
+ Review failures preserve output instead of creating tasks.
261
+
262
+ Planning has independent `--sandbox` / `--no-sandbox`,
263
+ `--network-access` / `--no-network-access`,
264
+ `--approval-policy on-request|untrusted|never`, repeatable `--trusted-dir`, and
265
+ `--timeout` (1–3600 seconds; default 600, or `ai.plan.timeout`) requirements.
266
+ Unset sandbox uses the collector's safe default; explicit confinement requires
267
+ public support and tool-managed behavior is not a confinement guarantee.
268
+ Unsupported policies, model/effort combinations, or `ai.plan.mode` transport
269
+ overrides fail clearly. `--yolo` affects only WADE's post-plan confirmations;
270
+ `auto` and `accept-edits` are rejected. The separate implementation offer still
271
+ requires explicit confirmation.
272
+
273
+ Omitting the network flag adds no network grant; it does not promise isolation
274
+ for an unrestricted or tool-managed runtime. Explicit `--no-network-access`
275
+ requires supported sandbox network control (and is rejected with `--no-sandbox`
276
+ in the adopted contract). WADE never drops that explicit restriction to enable
277
+ a collector.
278
+
279
+ Eligibility follows Crossby's complete-session metadata and bounded version
280
+ preflight after final tool selection, before worktree/provider mutations.
281
+ With the adopted release, Claude (attached terminal), Codex, and OpenCode support
282
+ WADE's required command policy. Cursor and Antigravity CLI are rejected until
283
+ their collectors support that policy; Copilot lacks native-question collection,
284
+ and GUI launchers are unsupported. This is not a permanent tool allowlist.
285
+ Authentication, model availability, protocol negotiation, and artifacts are
286
+ checked at runtime; static preflight does not promise them. Unavailable input
287
+ never supplies a native answer or permission grant.
288
+
289
+ Session IDs and exact native provenance are retained. The collection API does
290
+ not provide a full transcript or token usage; WADE reports them unavailable,
291
+ without substituting the plan text or fabricated usage totals.
253
292
 
254
293
  `wade plan --issue <N>` re-plans an existing task. If the session produces a
255
294
  single plan file, it's attached to `#N` and the task stays open. If the
@@ -260,8 +299,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
260
299
  `--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
261
300
  left open with a warning instead of superseding on a partial split.
262
301
 
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
302
  ### Base branch
266
303
 
267
304
  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 +498,17 @@ enough to pick up improvements, with no re-init or migration.
461
498
  | Worktree containment | Writes that land outside your worktree |
462
499
  | Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
463
500
  | 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) |
501
+ | Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
465
502
 
466
503
  The session-completion guard keys on the same fact `done` records — a sha-keyed
467
504
  `.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
468
505
  when the branch has commits ahead of its base **and** `done` has not finalized
469
506
  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.
507
+ never triggers it. This Stop nudge fails **open**. Native planning does not
508
+ install the old file-based Stop nudge: canonical files exist only after the
509
+ collector returns. Required review and validation now run in the parent.
510
+ Native transports may exclude ambient tool settings/hooks to preserve command
511
+ policy; hooks are defense in depth, not a native collection guarantee.
474
512
 
475
513
  Independently of that nudge, `wade plan` now **strictly validates** plan files
476
514
  before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
@@ -494,8 +532,8 @@ the label never fails task creation, and a body with no `## Complexity` section
494
532
  just skips it. An explicit `--label complexity:X` takes precedence over the body
495
533
  value, so the task never ends up with two conflicting complexity labels.
496
534
 
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.
535
+ If some files pass and others fail, a human must explicitly accept a
536
+ dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
499
537
  If you decline, or if every plan file fails validation, no tasks are created —
500
538
  the generated `PLAN*.md` are preserved to a temp directory so you can fix the
501
539
  reported errors and re-run instead of regenerating from scratch.
@@ -616,6 +654,9 @@ Description body here. Sub-headings, code blocks, anything markdown.
616
654
 
617
655
  ### Permission modes
618
656
 
657
+ These autonomy tiers apply to ordinary launches. Native `wade plan` is the
658
+ exception described above: default/YOLO control the parent, never the child.
659
+
619
660
  `--permission-mode` sets how much autonomy the AI tool is granted — an axis
620
661
  independent of the delegation `--mode` (which controls *how* a tool is
621
662
  dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
@@ -677,6 +718,9 @@ failure feedback, and any truncation is labeled.
677
718
 
678
719
  ### AI runtime sandbox profile
679
720
 
721
+ The defaults below apply to **non-plan launches**. Native planning uses the
722
+ independent request policies described in [Planning & base branches](#planning--base-branches).
723
+
680
724
  `ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
681
725
  the **AI runtime** inside its own filesystem sandbox. It governs the external
682
726
  runtime boundary only — it never relaxes WADE's own guards (see below).
@@ -686,9 +730,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
686
730
  | `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
731
  | `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
688
732
 
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
733
+ Network access is **on in both non-plan profiles** and is not configurable for
734
+ ordinary launches. Not every phase needs it (dependency analysis does not),
735
+ but the phases that do — `git
692
736
  fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
693
737
  is fixed at launch.
694
738