wade-cli 0.48.1__tar.gz → 0.50.2__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 (381) hide show
  1. {wade_cli-0.48.1 → wade_cli-0.50.2}/.wade.yml +16 -0
  2. {wade_cli-0.48.1 → wade_cli-0.50.2}/CHANGELOG.md +54 -0
  3. {wade_cli-0.48.1 → wade_cli-0.50.2}/CONTRIBUTING.md +4 -3
  4. {wade_cli-0.48.1 → wade_cli-0.50.2}/KNOWLEDGE.md +21 -0
  5. {wade_cli-0.48.1 → wade_cli-0.50.2}/KNOWLEDGE.ratings.jsonl +7 -0
  6. {wade_cli-0.48.1 → wade_cli-0.50.2}/PKG-INFO +325 -170
  7. {wade_cli-0.48.1 → wade_cli-0.50.2}/README.md +323 -168
  8. {wade_cli-0.48.1 → wade_cli-0.50.2}/docs/dev/architecture.md +106 -22
  9. {wade_cli-0.48.1 → wade_cli-0.50.2}/docs/dev/extending.md +3 -1
  10. {wade_cli-0.48.1 → wade_cli-0.50.2}/docs/dev/skills-system.md +30 -2
  11. {wade_cli-0.48.1 → wade_cli-0.50.2}/docs/dev/testing.md +25 -9
  12. {wade_cli-0.48.1 → wade_cli-0.50.2}/pyproject.toml +2 -2
  13. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/__init__.py +1 -1
  14. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/implementation_session.py +8 -2
  15. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/plan_session.py +5 -3
  16. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/review_pr_comments_session.py +21 -11
  17. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/config/loader.py +10 -2
  18. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/git/repo.py +13 -3
  19. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/hooks/policies.py +50 -1
  20. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/config.py +22 -0
  21. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/review.py +314 -10
  22. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/providers/_pr_delegate.py +4 -4
  23. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/providers/github.py +59 -6
  24. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/batch_review_service.py +3 -2
  25. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/check_service.py +20 -1
  26. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/bootstrap.py +96 -21
  27. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/done.py +1 -1
  28. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/lifecycle.py +41 -3
  29. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/sync.py +1 -1
  30. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/init_service/config_io.py +8 -4
  31. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/review_delegation_service.py +61 -7
  32. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/review_service.py +217 -23
  33. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/task_service.py +34 -3
  34. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/skills/installer.py +15 -1
  35. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/skills/pointer.py +61 -34
  36. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/ui/prompts.py +51 -4
  37. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/prompts/deps-analysis.md +1 -1
  38. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/prompts/plan-session.md +3 -3
  39. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/prompts/review-batch.md +2 -0
  40. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/prompts/review-code.md +2 -0
  41. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/prompts/review-plan.md +2 -0
  42. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/prompts/review-pr-comments.md +3 -0
  43. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/prompts/session-start-implement.md +1 -0
  44. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/prompts/session-start-plan.md +1 -0
  45. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/prompts/session-start-review.md +1 -0
  46. wade_cli-0.50.2/templates/skills/_partials/review-budget.md +46 -0
  47. wade_cli-0.50.2/templates/skills/_partials/review-enforcement-rule.md +12 -0
  48. wade_cli-0.50.2/templates/skills/_partials/review-implementation-closing-step.md +25 -0
  49. wade_cli-0.50.2/templates/skills/_partials/review-plan-step.md +18 -0
  50. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/_partials/user-interaction.md +1 -1
  51. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/deps/SKILL.md +18 -6
  52. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/implementation-session/SKILL.md +13 -11
  53. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/plan-session/SKILL.md +17 -11
  54. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/plan-session/reference/plan-format.md +1 -1
  55. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/review-pr-comments-session/SKILL.md +15 -8
  56. wade_cli-0.50.2/templates/skills/task/SKILL.md +262 -0
  57. wade_cli-0.50.2/templates/skills/task/examples.md +160 -0
  58. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/task/plan-format.md +5 -4
  59. wade_cli-0.50.2/templates/skills/task/reference/session-summary-format.md +105 -0
  60. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/_support.py +20 -0
  61. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/mock_gh_script.py +20 -17
  62. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/test_review_contract.py +59 -0
  63. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/integration/test_skill_context_budget.py +33 -1
  64. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/integration/test_skill_install.py +165 -6
  65. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_config/test_bot_review_config.py +67 -0
  66. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_hooks/test_session_start.py +71 -0
  67. wade_cli-0.50.2/tests/unit/test_models/test_review_expectation.py +248 -0
  68. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_providers/test_github_pr.py +82 -0
  69. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_batch_review_service.py +40 -0
  70. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_poll_for_reviews.py +128 -0
  71. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_post_implementation_lifecycle.py +172 -0
  72. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_resume_autonomy.py +4 -3
  73. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_review_delegation_service.py +211 -0
  74. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_review_service.py +97 -0
  75. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_task_service.py +43 -0
  76. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_tracked_managed_files.py +186 -14
  77. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_worktree_gitignore.py +17 -2
  78. wade_cli-0.50.2/tests/unit/test_skills/test_pointer.py +42 -0
  79. wade_cli-0.50.2/tests/unit/test_skills/test_review_budget_partial.py +65 -0
  80. wade_cli-0.50.2/tests/unit/test_utils/test_prompts.py +92 -0
  81. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_yolo.py +6 -3
  82. wade_cli-0.48.1/templates/skills/_partials/review-enforcement-rule.md +0 -8
  83. wade_cli-0.48.1/templates/skills/_partials/review-implementation-closing-step.md +0 -34
  84. wade_cli-0.48.1/templates/skills/_partials/review-plan-step.md +0 -17
  85. wade_cli-0.48.1/templates/skills/task/SKILL.md +0 -196
  86. wade_cli-0.48.1/templates/skills/task/examples.md +0 -132
  87. wade_cli-0.48.1/tests/unit/test_utils/test_prompts.py +0 -48
  88. {wade_cli-0.48.1 → wade_cli-0.50.2}/.gitattributes +0 -0
  89. {wade_cli-0.48.1 → wade_cli-0.50.2}/.github/workflows/auto-version.yml +0 -0
  90. {wade_cli-0.48.1 → wade_cli-0.50.2}/.github/workflows/ci.yml +0 -0
  91. {wade_cli-0.48.1 → wade_cli-0.50.2}/.github/workflows/pr-title-lint.yml +0 -0
  92. {wade_cli-0.48.1 → wade_cli-0.50.2}/.github/workflows/publish.yml +0 -0
  93. {wade_cli-0.48.1 → wade_cli-0.50.2}/.github/workflows/release.yml +0 -0
  94. {wade_cli-0.48.1 → wade_cli-0.50.2}/.gitignore +0 -0
  95. {wade_cli-0.48.1 → wade_cli-0.50.2}/.pre-commit-config.yaml +0 -0
  96. {wade_cli-0.48.1 → wade_cli-0.50.2}/AGENTS.md +0 -0
  97. {wade_cli-0.48.1 → wade_cli-0.50.2}/assets/wade.png +0 -0
  98. {wade_cli-0.48.1 → wade_cli-0.50.2}/docker-compose.e2e.yml +0 -0
  99. {wade_cli-0.48.1 → wade_cli-0.50.2}/docs/dev/documentation-policies.md +0 -0
  100. {wade_cli-0.48.1 → wade_cli-0.50.2}/install.sh +0 -0
  101. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/auto_version.py +0 -0
  102. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/changelog.py +0 -0
  103. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/check-all.sh +0 -0
  104. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/check.sh +0 -0
  105. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/fmt.sh +0 -0
  106. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/hooks/pre-push +0 -0
  107. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/install-hooks.sh +0 -0
  108. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/release.sh +0 -0
  109. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/setup-worktree.sh +0 -0
  110. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/test-concurrency.sh +0 -0
  111. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/test-e2e-docker.sh +0 -0
  112. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/test-e2e.sh +0 -0
  113. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/test-live-ai-taskr.sh +0 -0
  114. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/test-live-ai.sh +0 -0
  115. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/test-live-gh.sh +0 -0
  116. {wade_cli-0.48.1 → wade_cli-0.50.2}/scripts/test.sh +0 -0
  117. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/__main__.py +0 -0
  118. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/__init__.py +0 -0
  119. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/admin.py +0 -0
  120. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/autocomplete.py +0 -0
  121. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/hook.py +0 -0
  122. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/knowledge.py +0 -0
  123. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/main.py +0 -0
  124. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/review.py +0 -0
  125. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/session_shared.py +0 -0
  126. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/task.py +0 -0
  127. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/cli/worktree.py +0 -0
  128. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/config/__init__.py +0 -0
  129. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/config/migrations.py +0 -0
  130. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/config/schema.py +0 -0
  131. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/git/__init__.py +0 -0
  132. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/git/branch.py +0 -0
  133. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/git/hooks.py +0 -0
  134. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/git/pr.py +0 -0
  135. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/git/stash.py +0 -0
  136. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/git/sync.py +0 -0
  137. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/git/worktree.py +0 -0
  138. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/hooks/__init__.py +0 -0
  139. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/hooks/cli.py +0 -0
  140. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/logging/__init__.py +0 -0
  141. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/logging/context.py +0 -0
  142. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/logging/setup.py +0 -0
  143. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/__init__.py +0 -0
  144. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/batch.py +0 -0
  145. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/delegation.py +0 -0
  146. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/deps.py +0 -0
  147. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/events.py +0 -0
  148. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/hooks.py +0 -0
  149. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/permission.py +0 -0
  150. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/session.py +0 -0
  151. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/task.py +0 -0
  152. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/models/worktree.py +0 -0
  153. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/providers/__init__.py +0 -0
  154. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/providers/base.py +0 -0
  155. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/providers/clickup.py +0 -0
  156. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/providers/markdown.py +0 -0
  157. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/providers/registry.py +0 -0
  158. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/__init__.py +0 -0
  159. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/ai_resolution.py +0 -0
  160. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/delegation_service.py +0 -0
  161. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/deps_service.py +0 -0
  162. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/__init__.py +0 -0
  163. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/_shared.py +0 -0
  164. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/batch.py +0 -0
  165. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/cleanup.py +0 -0
  166. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/core.py +0 -0
  167. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/draft_pr.py +0 -0
  168. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/implementation_service/usage_tracking.py +0 -0
  169. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/init_service/__init__.py +0 -0
  170. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/init_service/auth.py +0 -0
  171. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/init_service/commands.py +0 -0
  172. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/init_service/manifest.py +0 -0
  173. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/init_service/migrations.py +0 -0
  174. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/init_service/prompts_ai.py +0 -0
  175. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/init_service/prompts_setup.py +0 -0
  176. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/init_service/shell.py +0 -0
  177. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/knowledge_search.py +0 -0
  178. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/knowledge_service.py +0 -0
  179. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/plan_service.py +0 -0
  180. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/prompt_delivery.py +0 -0
  181. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/review_settle.py +0 -0
  182. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/services/smart_start.py +0 -0
  183. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/skills/__init__.py +0 -0
  184. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/skills/doc_targets.py +0 -0
  185. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/ui/__init__.py +0 -0
  186. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/ui/console.py +0 -0
  187. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/__init__.py +0 -0
  188. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/body_markers.py +0 -0
  189. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/clipboard.py +0 -0
  190. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/conventional.py +0 -0
  191. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/filelock.py +0 -0
  192. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/gitref.py +0 -0
  193. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/http.py +0 -0
  194. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/install.py +0 -0
  195. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/knowledge_file.py +0 -0
  196. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/markdown.py +0 -0
  197. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/markers.py +0 -0
  198. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/paths.py +0 -0
  199. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/plan_validation.py +0 -0
  200. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/process.py +0 -0
  201. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/slug.py +0 -0
  202. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/stale_base.py +0 -0
  203. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/templates.py +0 -0
  204. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/terminal.py +0 -0
  205. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/token_usage_markdown.py +0 -0
  206. {wade_cli-0.48.1 → wade_cli-0.50.2}/src/wade/utils/update_check.py +0 -0
  207. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/agents-pointer.md +0 -0
  208. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/hooks/commit-msg +0 -0
  209. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/hooks/pre-commit +0 -0
  210. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/hooks/pre-push +0 -0
  211. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/prompts/implement-context.md +0 -0
  212. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/setup-worktree.sh.example +0 -0
  213. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/_partials/doc-update-step.md +0 -0
  214. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/_partials/knowledge-step.md +0 -0
  215. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/implementation-session/reference/doc-update.md +0 -0
  216. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/implementation-session/reference/new-plan.md +0 -0
  217. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/implementation-session/reference/pr-summary-format.md +0 -0
  218. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/implementation-session/reference/recovery.md +0 -0
  219. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/implementation-session/reference/tracking-issues.md +0 -0
  220. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/knowledge/SKILL.md +0 -0
  221. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/review-pr-comments-session/reference/doc-update.md +0 -0
  222. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/skills/review-pr-comments-session/reference/recovery.md +0 -0
  223. {wade_cli-0.48.1 → wade_cli-0.50.2}/templates/statusline-command.sh +0 -0
  224. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/__init__.py +0 -0
  225. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/concurrency/__init__.py +0 -0
  226. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/concurrency/test_batch_multi_pr.py +0 -0
  227. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/concurrency/test_knowledge_merge.py +0 -0
  228. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/concurrency/test_lock_retry.py +0 -0
  229. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/concurrency/test_stash_race.py +0 -0
  230. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/conftest.py +0 -0
  231. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/__init__.py +0 -0
  232. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/conftest.py +0 -0
  233. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/test_admin_contract.py +0 -0
  234. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/test_check_contract.py +0 -0
  235. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/test_implement_work_done_contract.py +0 -0
  236. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/test_knowledge_contract.py +0 -0
  237. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/test_mock_gh_contract.py +0 -0
  238. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/test_plan_contract.py +0 -0
  239. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/test_smart_start_contract.py +0 -0
  240. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/test_task_contract.py +0 -0
  241. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/e2e/test_work_sync_list_contract.py +0 -0
  242. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
  243. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
  244. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/fixtures/transcripts/claude_session.txt +0 -0
  245. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/fixtures/transcripts/codex_session.txt +0 -0
  246. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  247. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/fixtures/transcripts/generic_session.txt +0 -0
  248. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/integration/__init__.py +0 -0
  249. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/integration/test_autostash.py +0 -0
  250. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/integration/test_check.py +0 -0
  251. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/integration/test_git.py +0 -0
  252. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/integration/test_implementation_lifecycle.py +0 -0
  253. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/integration/test_init.py +0 -0
  254. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/integration/test_knowledge.py +0 -0
  255. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/integration/test_markdown_provider.py +0 -0
  256. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/live/__init__.py +0 -0
  257. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/live/test_wade_live_ai.py +0 -0
  258. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/live/test_wade_live_ai_taskr.py +0 -0
  259. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/live/test_wade_live_gh.py +0 -0
  260. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/test_cli_basics.py +0 -0
  261. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/__init__.py +0 -0
  262. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/conftest.py +0 -0
  263. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_cli/__init__.py +0 -0
  264. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
  265. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_cli/test_done_review_hint.py +0 -0
  266. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
  267. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_cli/test_review_cli.py +0 -0
  268. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_cli/test_session_subapps.py +0 -0
  269. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_cli/test_shell_init.py +0 -0
  270. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_cli/test_task_cli.py +0 -0
  271. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
  272. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_cli/test_work_cli.py +0 -0
  273. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_config/__init__.py +0 -0
  274. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_config/test_loader.py +0 -0
  275. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
  276. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_config/test_migrations.py +0 -0
  277. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  278. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_console.py +0 -0
  279. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_effort.py +0 -0
  280. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/__init__.py +0 -0
  281. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_all_patches_present.py +0 -0
  282. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_branch_list.py +0 -0
  283. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_branch_slugify.py +0 -0
  284. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_detached_worktree.py +0 -0
  285. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_is_merged_into.py +0 -0
  286. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_main_checkout_root.py +0 -0
  287. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_merge_count.py +0 -0
  288. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_pr_base.py +0 -0
  289. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_pr_lookup.py +0 -0
  290. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_pr_retry.py +0 -0
  291. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_pr_title.py +0 -0
  292. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_repo.py +0 -0
  293. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_reset_branch.py +0 -0
  294. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  295. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_stash_drop.py +0 -0
  296. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  297. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
  298. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_git/test_worktree_remove.py +0 -0
  299. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_hooks/__init__.py +0 -0
  300. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_hooks/test_hook_cli.py +0 -0
  301. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_hooks/test_policies.py +0 -0
  302. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
  303. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_models/__init__.py +0 -0
  304. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_models/test_batch.py +0 -0
  305. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_models/test_config_models.py +0 -0
  306. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_models/test_delegation.py +0 -0
  307. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_models/test_deps_models.py +0 -0
  308. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_models/test_deps_partition.py +0 -0
  309. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_models/test_review.py +0 -0
  310. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_models/test_task_models.py +0 -0
  311. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_permission_mode.py +0 -0
  312. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_providers/__init__.py +0 -0
  313. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_providers/test_clickup.py +0 -0
  314. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_providers/test_github.py +0 -0
  315. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_providers/test_markdown.py +0 -0
  316. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/__init__.py +0 -0
  317. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_ai_resolution.py +0 -0
  318. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
  319. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_batch_pr_index.py +0 -0
  320. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_bootstrap_allowlist.py +0 -0
  321. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
  322. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
  323. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
  324. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
  325. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_bot_trigger.py +0 -0
  326. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_catchup.py +0 -0
  327. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
  328. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_check.py +0 -0
  329. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
  330. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
  331. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_delegation_service.py +0 -0
  332. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_deps_service.py +0 -0
  333. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_done_gates.py +0 -0
  334. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_done_idempotent.py +0 -0
  335. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_done_plan_flag.py +0 -0
  336. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
  337. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
  338. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
  339. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
  340. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
  341. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_implementation_service.py +0 -0
  342. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
  343. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_init.py +0 -0
  344. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  345. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_knowledge_search.py +0 -0
  346. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_knowledge_service.py +0 -0
  347. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
  348. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_no_direct_git.py +0 -0
  349. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_plan_service.py +0 -0
  350. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
  351. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_pr_summary_path.py +0 -0
  352. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
  353. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_preserve_session_data.py +0 -0
  354. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_prompt_delivery.py +0 -0
  355. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_push_recovery.py +0 -0
  356. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
  357. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_review_status_block.py +0 -0
  358. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_reviewed_marker.py +0 -0
  359. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_smart_start.py +0 -0
  360. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_smart_start_resume.py +0 -0
  361. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_stale_base_surface.py +0 -0
  362. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_services/test_sync_base_branch.py +0 -0
  363. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_skills/test_doc_targets.py +0 -0
  364. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
  365. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
  366. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/__init__.py +0 -0
  367. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_body_markers.py +0 -0
  368. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_conventional.py +0 -0
  369. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_filelock.py +0 -0
  370. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_gitref.py +0 -0
  371. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_http.py +0 -0
  372. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_install.py +0 -0
  373. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_markdown.py +0 -0
  374. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_markers.py +0 -0
  375. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_plan_validation.py +0 -0
  376. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_process.py +0 -0
  377. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_slug.py +0 -0
  378. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_stale_base.py +0 -0
  379. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_terminal.py +0 -0
  380. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_terminal_launch.py +0 -0
  381. {wade_cli-0.48.1 → wade_cli-0.50.2}/tests/unit/test_utils/test_update_check.py +0 -0
@@ -58,6 +58,22 @@ models:
58
58
  effort: xhigh
59
59
  provider:
60
60
  name: github
61
+ bot_review:
62
+ # This repo runs CodeRabbit + Codex, not Cursor Bugbot. Bugbot is disabled so
63
+ # expectation-verified completion (#448) doesn't wait arrival_timeout for a
64
+ # review that never arrives on every review check. arrival_timeout/ack_timeout
65
+ # keep their defaults (300s / 900s).
66
+ auto_trigger: false
67
+ bots:
68
+ - name: coderabbit
69
+ trigger: '@coderabbitai review'
70
+ enabled: true
71
+ - name: codex
72
+ trigger: '@codex review'
73
+ enabled: true
74
+ - name: bugbot
75
+ trigger: bugbot run
76
+ enabled: false
61
77
  knowledge:
62
78
  enabled: true
63
79
  path: KNOWLEDGE.md
@@ -4,6 +4,60 @@ 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
+ ## [v0.50.2] — 2026-08-19
8
+
9
+ ### Bug Fixes
10
+
11
+ - list uncommitted files before the PR-merge "work will be lost" prompt (#454) (932c645)
12
+
13
+ ## [v0.50.1] — 2026-08-18
14
+
15
+ ### Chores
16
+
17
+ - bump crossby to v0.24.3 (#452) (403daa8)
18
+
19
+ ## [v0.50.0] — 2026-08-18
20
+
21
+ ### Features
22
+
23
+ - harden and align review-pass budget and skip guidance across workflows (#451) (cef9d99)
24
+
25
+ ## [v0.49.1] — 2026-08-18
26
+
27
+ ### Bug Fixes
28
+
29
+ - don't report review bots done until they've actually reviewed (#449) (01a3192)
30
+
31
+ ## [v0.49.0] — 2026-08-18
32
+
33
+ ### Features
34
+
35
+ - standardize WADE session summaries with emoji status and decisive dialog prompts (#444) (4c4d730)
36
+
37
+ ## [v0.48.5] — 2026-08-18
38
+
39
+ ### Documentation
40
+
41
+ - align installed agent guidance with the plan-driven lifecycle (#442) (d5dbcfc)
42
+
43
+ ## [v0.48.4] — 2026-08-18
44
+
45
+ ### Bug Fixes
46
+
47
+ - wrap long choices in interactive pickers instead of cropping (#446) (6b162b6)
48
+
49
+ ## [v0.48.3] — 2026-08-18
50
+
51
+ ### Documentation
52
+
53
+ - reconcile developer references with the current codebase (#440) (c20a564)
54
+
55
+ ## [v0.48.2] — 2026-08-17
56
+
57
+ ### Documentation
58
+
59
+ - refresh public onboarding and product positioning (#438) (3f822e2)
60
+
7
61
  ## [v0.48.1] — 2026-08-17
8
62
 
9
63
  ### Documentation
@@ -35,14 +35,15 @@ uv pip install -e ".[dev]"
35
35
 
36
36
  ```
37
37
  CLI Layer → services, models, config, logging, ui
38
- Service Layer → providers, crossby (AI tool adapters), git, db, models, config, logging
38
+ Service Layer → providers, crossby (AI tool adapters), git, models, config, logging
39
39
  Provider Layer → models, config, logging (no service imports)
40
40
  Git Layer → models, config, logging (no service imports)
41
- DB Layer → models, logging (no config imports)
42
41
  Models Layer → nothing (leaf)
43
42
  ```
44
43
 
45
- AI tool adapters live in the external [`crossby`](https://github.com/ivanviragine/crossby) package, not this repo — see `docs/dev/architecture.md`.
44
+ Never import a higher layer from a lower one, and keep business logic out of `cli/`. One sanctioned exception runs the other way: services may import the lower `skills/` utility layer for skill-file management (`install_skills`, the `*_SKILLS` registries, gitignore/cross-tool constants), never the reverse.
45
+
46
+ AI tool adapters live in the external [`crossby`](https://github.com/ivanviragine/crossby) package, not this repo — wade's services import `crossby.ai_tools` and `crossby.models.ai` directly. See `docs/dev/architecture.md`.
46
47
 
47
48
  CLI modules are thin dispatch — parse flags with Typer, call service methods. Business logic lives in `services/`, not `cli/`.
48
49
 
@@ -656,3 +656,24 @@ WADE owns zero AI-tool model catalogs — catalog models come from crossby's sta
656
656
  uv.lock is gitignored in the WADE repo (.gitignore:47) and NOT tracked. A dependency bump therefore commits only pyproject.toml (and the regenerated lock stays local for reproducibility). CI uses 'uv sync --all-extras' (not --locked/--frozen), so there is no lock-freshness gate. Do not 'git add -f uv.lock' during a dependency change.
657
657
 
658
658
  ---
659
+
660
+ ## 3f6332a4b61d | 2026-08-18 | implementation | tags: providers, deps, clickup | Issue #441
661
+
662
+ WADE's dependency-graph and parent-linkage automation is numeric-ID only, so opaque-ID providers (ClickUp) cannot use it. Three places all assume digits: parse_deps_output's _ARROW_RE (deps_service.py, `^\d+ -> \d+`) rejects non-numeric edges; AbstractTaskProvider.find_parent_issue defaults to returning None (providers/base.py) and ClickUpProvider does NOT override it (GitHubProvider does, providers/github.py); and _CHECKLIST_ISSUE_RE / parse_all_issue_refs (models/task.py) match only `#<digits>`. Consequence: for ClickUp, `wade task deps` produces no accepted edges and an epic's `- [ ] #id` checklist is not recognized by done/batch parent flows — the epic is a human-readable tracking doc only. Documented in templates/skills/task/SKILL.md and deps/SKILL.md scope notes (PR #442).
663
+ ## 82ad4c583c58 | 2026-08-18 | implementation | tags: ui, prompts, questionary | Issue #445
664
+
665
+ wade's interactive pickers all funnel through src/wade/ui/prompts.py (select/menu/multi_select -> questionary select/checkbox). questionary builds the choice list as a prompt_toolkit Window(InquirerControl) with the default wrap_lines=False, which CROPS long choices to the terminal width (silently losing text). To make choices wrap, call _enable_choice_wrapping(question) BETWEEN constructing the Question and calling .ask(): it walks question.application.layout.find_all_windows() and sets win.wrap_lines = to_filter(True) on each Window whose .content is a questionary.prompts.common.InquirerControl. Done best-effort (try/except -> logger.debug("prompts.choice_wrap_failed")) because it depends on undocumented questionary internals; pyproject pins questionary>=2.0 with no ceiling. wrap_lines reflows on resize and the highlight/[SetCursorPosition] carry across wrapped rows, so selection + arrow-key scroll still work. Known limit: no hanging indent (continuation rows start at col 0). confirm()/input_prompt() left unchanged (Yes/No + free text, no long choices). Pinned by tests/unit/test_utils/test_prompts.py::TestEnableChoiceWrapping.
666
+
667
+ ---
668
+
669
+ ## b7e8aa32094f | 2026-08-18 | implementation | tags: ui, prompts, rich | Issue #445
670
+
671
+ The plain non-interactive Rich-printed list rows (task_service.list_tasks, implementation_service/cleanup.list_sessions/worktree list) already WRAP via Console.print defaults (no_wrap=False, overflow "fold") — verified rendering a long row at width 40. The long-choice CROP bug (#445) was ONLY ever in the questionary arrow-key picker (src/wade/ui/prompts.py), never in the Rich output path. So a "text is cropped" report about a list should be triaged to whether it came from the interactive picker vs the plain printed list.
672
+
673
+ ---
674
+
675
+ ## 3cc3b0e546d4 | 2026-08-18 | implementation | tags: review, review-polling, coderabbit, codex | Issue #448
676
+
677
+ Review completion must be *expectation-verified*, not presence-inferred: absence of a blocking bot signal does NOT mean the review is done. WADE must verify each *enabled* bot (bot_review.bots) has posted a review covering HEAD before reporting all-clear. Generalizes cc91cd11 (a CodeRabbit COMPLETED marker != done posting). Implementation (#448): models/review.py holds a pure compute_bot_arrivals() returning per-bot ARRIVED/AWAITING/ACKNOWLEDGED/MISSING, plus bot_login_matches() (verified logins: coderabbitai[bot], chatgpt-codex-connector; bugbot is a best-effort cursor/bugbot guess). review_covers_latest_commit gates on blocking_bots when expected_bots is set. The service (annotate_bot_expectations) is the ONLY layer with config+clock, so it populates expected_bots and computes the arrival map (window measured from later of commit push and a .wade/bot-triggered marker; falls back to commit push). The arrival window (arrival_timeout=300s / ack_timeout=900s config) bounds the wait so an enabled-but-not-installed bot cannot hang the session — past its window it stops blocking but is reported distinctly (never swallowed into done). A bot's PR-level reaction (Codex posts THUMBS_UP/+1, NOT a comment-level eyes as first assumed) is an ack that extends its window to ack_timeout. Every completion surface must read the map: poll_for_reviews, start(), fetch_reviews(), format_review_status_summary.
678
+
679
+ ---
@@ -117,3 +117,10 @@
117
117
  {"dir": "up", "id": "cc91cd11", "ts": "2026-08-16T19:08:31.215429+00:00"}
118
118
  {"dir": "up", "id": "69f9e60c7c9f", "ts": "2026-08-17T19:57:30.614903+00:00"}
119
119
  {"dir": "up", "id": "69f9e60c7c9f", "ts": "2026-08-17T20:16:14.514374+00:00"}
120
+ {"dir": "up", "id": "94ae0a8fd4c9", "ts": "2026-08-18T10:21:14.990160+00:00"}
121
+ {"dir": "up", "id": "69f9e60c7c9f", "ts": "2026-08-18T10:21:15.166868+00:00"}
122
+ {"dir": "up", "id": "702b274f", "ts": "2026-08-18T12:09:19.959012+00:00"}
123
+ {"dir": "up", "id": "cc91cd11", "ts": "2026-08-18T12:50:49.552087+00:00"}
124
+ {"dir": "up", "id": "3f6332a4b61d", "ts": "2026-08-18T13:33:29.057439+00:00"}
125
+ {"id": "cc91cd11", "superseded_by": "3cc3b0e546d4", "ts": "2026-08-18T14:36:50.310773+00:00"}
126
+ {"dir": "up", "id": "b6ca74e5", "ts": "2026-08-18T17:31:53.785409+00:00"}