wade-cli 1.2.0__tar.gz → 1.2.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 (429) hide show
  1. {wade_cli-1.2.0 → wade_cli-1.2.2}/.wade.yml +4 -0
  2. {wade_cli-1.2.0 → wade_cli-1.2.2}/CHANGELOG.md +12 -0
  3. {wade_cli-1.2.0 → wade_cli-1.2.2}/PKG-INFO +1 -1
  4. {wade_cli-1.2.0 → wade_cli-1.2.2}/pyproject.toml +1 -1
  5. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/__init__.py +1 -1
  6. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/review_service.py +24 -15
  7. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_service.py +96 -10
  8. {wade_cli-1.2.0 → wade_cli-1.2.2}/.gitattributes +0 -0
  9. {wade_cli-1.2.0 → wade_cli-1.2.2}/.github/workflows/auto-version.yml +0 -0
  10. {wade_cli-1.2.0 → wade_cli-1.2.2}/.github/workflows/ci.yml +0 -0
  11. {wade_cli-1.2.0 → wade_cli-1.2.2}/.github/workflows/pr-title-lint.yml +0 -0
  12. {wade_cli-1.2.0 → wade_cli-1.2.2}/.github/workflows/publish.yml +0 -0
  13. {wade_cli-1.2.0 → wade_cli-1.2.2}/.github/workflows/release.yml +0 -0
  14. {wade_cli-1.2.0 → wade_cli-1.2.2}/.gitignore +0 -0
  15. {wade_cli-1.2.0 → wade_cli-1.2.2}/.pre-commit-config.yaml +0 -0
  16. {wade_cli-1.2.0 → wade_cli-1.2.2}/AGENTS.md +0 -0
  17. {wade_cli-1.2.0 → wade_cli-1.2.2}/CONTRIBUTING.md +0 -0
  18. {wade_cli-1.2.0 → wade_cli-1.2.2}/KNOWLEDGE.md +0 -0
  19. {wade_cli-1.2.0 → wade_cli-1.2.2}/KNOWLEDGE.ratings.jsonl +0 -0
  20. {wade_cli-1.2.0 → wade_cli-1.2.2}/README.md +0 -0
  21. {wade_cli-1.2.0 → wade_cli-1.2.2}/assets/wade.png +0 -0
  22. {wade_cli-1.2.0 → wade_cli-1.2.2}/docker-compose.e2e.yml +0 -0
  23. {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/architecture.md +0 -0
  24. {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/documentation-policies.md +0 -0
  25. {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/extending.md +0 -0
  26. {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/skills-system.md +0 -0
  27. {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/testing.md +0 -0
  28. {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/workflows-and-skills.md +0 -0
  29. {wade_cli-1.2.0 → wade_cli-1.2.2}/install.sh +0 -0
  30. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/auto_version.py +0 -0
  31. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/changelog.py +0 -0
  32. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/check-all.sh +0 -0
  33. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/check.sh +0 -0
  34. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/fmt.sh +0 -0
  35. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/hooks/pre-push +0 -0
  36. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/install-hooks.sh +0 -0
  37. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/release.sh +0 -0
  38. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/setup-worktree.sh +0 -0
  39. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-concurrency.sh +0 -0
  40. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-e2e-docker.sh +0 -0
  41. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-e2e.sh +0 -0
  42. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-live-ai-taskr.sh +0 -0
  43. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-live-ai.sh +0 -0
  44. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-live-gh.sh +0 -0
  45. {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test.sh +0 -0
  46. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/__main__.py +0 -0
  47. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/__init__.py +0 -0
  48. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/admin.py +0 -0
  49. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/autocomplete.py +0 -0
  50. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/deps_session.py +0 -0
  51. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/hook.py +0 -0
  52. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/implementation_session.py +0 -0
  53. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/knowledge.py +0 -0
  54. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/main.py +0 -0
  55. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/plan_session.py +0 -0
  56. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/review.py +0 -0
  57. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/review_pr_comments_session.py +0 -0
  58. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/session.py +0 -0
  59. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/session_shared.py +0 -0
  60. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/skills.py +0 -0
  61. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/task.py +0 -0
  62. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/worktree.py +0 -0
  63. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/config/__init__.py +0 -0
  64. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/config/loader.py +0 -0
  65. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/config/migrations.py +0 -0
  66. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/config/schema.py +0 -0
  67. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/__init__.py +0 -0
  68. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/branch.py +0 -0
  69. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/hooks.py +0 -0
  70. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/pr.py +0 -0
  71. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/repo.py +0 -0
  72. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/stash.py +0 -0
  73. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/sync.py +0 -0
  74. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/worktree.py +0 -0
  75. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/hooks/__init__.py +0 -0
  76. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/hooks/cli.py +0 -0
  77. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/hooks/policies.py +0 -0
  78. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/logging/__init__.py +0 -0
  79. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/logging/context.py +0 -0
  80. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/logging/setup.py +0 -0
  81. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/__init__.py +0 -0
  82. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/batch.py +0 -0
  83. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/config.py +0 -0
  84. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/delegation.py +0 -0
  85. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/deps.py +0 -0
  86. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/events.py +0 -0
  87. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/hooks.py +0 -0
  88. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/permission.py +0 -0
  89. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/readiness.py +0 -0
  90. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/review.py +0 -0
  91. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/review_cycle.py +0 -0
  92. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/session.py +0 -0
  93. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/session_manifest.py +0 -0
  94. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/skill.py +0 -0
  95. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/task.py +0 -0
  96. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/workflow.py +0 -0
  97. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/worktree.py +0 -0
  98. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/__init__.py +0 -0
  99. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/_pr_delegate.py +0 -0
  100. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/base.py +0 -0
  101. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/clickup.py +0 -0
  102. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/github.py +0 -0
  103. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/markdown.py +0 -0
  104. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/registry.py +0 -0
  105. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/__init__.py +0 -0
  106. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/ai_resolution.py +0 -0
  107. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/batch_review_service.py +0 -0
  108. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/bot_trigger.py +0 -0
  109. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/check_service.py +0 -0
  110. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/delegation_service.py +0 -0
  111. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/deps_service.py +0 -0
  112. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/documentation_receipt_service.py +0 -0
  113. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/__init__.py +0 -0
  114. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/_shared.py +0 -0
  115. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/batch.py +0 -0
  116. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/bootstrap.py +0 -0
  117. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/cleanup.py +0 -0
  118. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/core.py +0 -0
  119. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/done.py +0 -0
  120. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/draft_pr.py +0 -0
  121. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/lifecycle.py +0 -0
  122. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/sync.py +0 -0
  123. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/usage_tracking.py +0 -0
  124. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/__init__.py +0 -0
  125. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/auth.py +0 -0
  126. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/commands.py +0 -0
  127. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/config_io.py +0 -0
  128. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/manifest.py +0 -0
  129. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/migrations.py +0 -0
  130. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/prompts_ai.py +0 -0
  131. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/prompts_setup.py +0 -0
  132. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/shell.py +0 -0
  133. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/knowledge_recovery.py +0 -0
  134. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/knowledge_search.py +0 -0
  135. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/knowledge_service.py +0 -0
  136. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/plan_service.py +0 -0
  137. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/prompt_delivery.py +0 -0
  138. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/review_cycle_service.py +0 -0
  139. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/review_delegation_service.py +0 -0
  140. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/review_record_service.py +0 -0
  141. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/review_settle.py +0 -0
  142. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/session_composition_service.py +0 -0
  143. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/skill_diagnostics_service.py +0 -0
  144. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/skill_invocation_service.py +0 -0
  145. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/smart_start.py +0 -0
  146. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/task_service.py +0 -0
  147. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/__init__.py +0 -0
  148. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/catalog.py +0 -0
  149. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/discovery.py +0 -0
  150. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/doc_targets.py +0 -0
  151. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/installer.py +0 -0
  152. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/materializer.py +0 -0
  153. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/pointer.py +0 -0
  154. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/resolver.py +0 -0
  155. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/validation.py +0 -0
  156. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/ui/__init__.py +0 -0
  157. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/ui/console.py +0 -0
  158. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/ui/prompts.py +0 -0
  159. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/__init__.py +0 -0
  160. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/body_markers.py +0 -0
  161. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/clipboard.py +0 -0
  162. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/conventional.py +0 -0
  163. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/filelock.py +0 -0
  164. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/gitref.py +0 -0
  165. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/http.py +0 -0
  166. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/install.py +0 -0
  167. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/knowledge_file.py +0 -0
  168. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/markdown.py +0 -0
  169. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/markers.py +0 -0
  170. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/paths.py +0 -0
  171. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/plan_validation.py +0 -0
  172. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/process.py +0 -0
  173. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/runtime_env.py +0 -0
  174. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/safe_state.py +0 -0
  175. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/slug.py +0 -0
  176. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/stale_base.py +0 -0
  177. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/templates.py +0 -0
  178. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/terminal.py +0 -0
  179. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/token_usage_markdown.py +0 -0
  180. {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/update_check.py +0 -0
  181. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/agents-pointer.md +0 -0
  182. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/hooks/commit-msg +0 -0
  183. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/hooks/pre-commit +0 -0
  184. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/hooks/pre-push +0 -0
  185. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/deps-analysis.md +0 -0
  186. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/implement-context.md +0 -0
  187. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/plan-session.md +0 -0
  188. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-batch.md +0 -0
  189. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-code.md +0 -0
  190. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-finding-admission.md +0 -0
  191. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-plan.md +0 -0
  192. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-pr-comments.md +0 -0
  193. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-batch.md +0 -0
  194. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-code.md +0 -0
  195. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-deps.md +0 -0
  196. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-full-branch.md +0 -0
  197. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-implementation.md +0 -0
  198. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-plan.md +0 -0
  199. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-pr-comments.md +0 -0
  200. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/session-start-implement.md +0 -0
  201. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/session-start-plan.md +0 -0
  202. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/session-start-review.md +0 -0
  203. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/setup-worktree.sh.example +0 -0
  204. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/batch-review/SKILL.md +0 -0
  205. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/code-review/SKILL.md +0 -0
  206. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/dependency-analysis/SKILL.md +0 -0
  207. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/feedback-fix-review/SKILL.md +0 -0
  208. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/implementation/SKILL.md +0 -0
  209. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/knowledge/SKILL.md +0 -0
  210. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/plan-review/SKILL.md +0 -0
  211. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/planning/SKILL.md +0 -0
  212. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/review-comments/SKILL.md +0 -0
  213. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/task/SKILL.md +0 -0
  214. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/task/examples.md +0 -0
  215. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/task/plan-format.md +0 -0
  216. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/task/reference/session-summary-format.md +0 -0
  217. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/statusline-command.sh +0 -0
  218. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/_partials/completion.md +0 -0
  219. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/_partials/documentation-step.md +0 -0
  220. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/_partials/interaction-policy.md +0 -0
  221. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/_partials/knowledge-step.md +0 -0
  222. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/_partials/review-budget.md +0 -0
  223. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/implementation.md +0 -0
  224. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/plan.md +0 -0
  225. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/documentation.md +0 -0
  226. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/new-plan.md +0 -0
  227. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/plan-output-contract.md +0 -0
  228. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/pr-summary-format.md +0 -0
  229. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/recovery.md +0 -0
  230. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/session-summary-format.md +0 -0
  231. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/tracking-issues.md +0 -0
  232. {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/review-pr-comments.md +0 -0
  233. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/__init__.py +0 -0
  234. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/concurrency/__init__.py +0 -0
  235. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/concurrency/test_batch_multi_pr.py +0 -0
  236. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/concurrency/test_knowledge_merge.py +0 -0
  237. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/concurrency/test_lock_retry.py +0 -0
  238. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/concurrency/test_stash_race.py +0 -0
  239. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/conftest.py +0 -0
  240. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/__init__.py +0 -0
  241. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/_support.py +0 -0
  242. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/conftest.py +0 -0
  243. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/mock_gh_script.py +0 -0
  244. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_admin_contract.py +0 -0
  245. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_check_contract.py +0 -0
  246. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_implement_work_done_contract.py +0 -0
  247. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_knowledge_contract.py +0 -0
  248. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_mock_gh_contract.py +0 -0
  249. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_plan_contract.py +0 -0
  250. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_review_contract.py +0 -0
  251. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_smart_start_contract.py +0 -0
  252. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_task_contract.py +0 -0
  253. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_work_sync_list_contract.py +0 -0
  254. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
  255. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
  256. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/transcripts/claude_session.txt +0 -0
  257. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/transcripts/codex_session.txt +0 -0
  258. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  259. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/transcripts/generic_session.txt +0 -0
  260. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/__init__.py +0 -0
  261. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_autostash.py +0 -0
  262. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_check.py +0 -0
  263. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_dynamic_skill_sessions.py +0 -0
  264. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_git.py +0 -0
  265. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_implementation_lifecycle.py +0 -0
  266. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_init.py +0 -0
  267. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_knowledge.py +0 -0
  268. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_markdown_provider.py +0 -0
  269. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_skill_context_budget.py +0 -0
  270. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_skill_install.py +0 -0
  271. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/live/__init__.py +0 -0
  272. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/live/test_wade_live_ai.py +0 -0
  273. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/live/test_wade_live_ai_taskr.py +0 -0
  274. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/live/test_wade_live_gh.py +0 -0
  275. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/test_cli_basics.py +0 -0
  276. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/__init__.py +0 -0
  277. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/conftest.py +0 -0
  278. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/__init__.py +0 -0
  279. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_autocomplete.py +0 -0
  280. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
  281. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_done_review_hint.py +0 -0
  282. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
  283. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_review_cli.py +0 -0
  284. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_session_subapps.py +0 -0
  285. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_shell_init.py +0 -0
  286. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_skills_session_cli.py +0 -0
  287. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_task_cli.py +0 -0
  288. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
  289. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_work_cli.py +0 -0
  290. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/__init__.py +0 -0
  291. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_bot_review_config.py +0 -0
  292. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_dynamic_skill_config.py +0 -0
  293. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_loader.py +0 -0
  294. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
  295. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_migrations.py +0 -0
  296. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  297. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_console.py +0 -0
  298. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_effort.py +0 -0
  299. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/__init__.py +0 -0
  300. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_all_patches_present.py +0 -0
  301. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_branch_list.py +0 -0
  302. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_branch_slugify.py +0 -0
  303. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_detached_worktree.py +0 -0
  304. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_is_merged_into.py +0 -0
  305. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_main_checkout_root.py +0 -0
  306. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_merge_count.py +0 -0
  307. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_pr_base.py +0 -0
  308. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_pr_lookup.py +0 -0
  309. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_pr_retry.py +0 -0
  310. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_pr_title.py +0 -0
  311. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_repo.py +0 -0
  312. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_reset_branch.py +0 -0
  313. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  314. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_stash_drop.py +0 -0
  315. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  316. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
  317. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_worktree_remove.py +0 -0
  318. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_hooks/__init__.py +0 -0
  319. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_hooks/test_hook_cli.py +0 -0
  320. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_hooks/test_policies.py +0 -0
  321. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
  322. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_hooks/test_session_start.py +0 -0
  323. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/__init__.py +0 -0
  324. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_batch.py +0 -0
  325. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_config_models.py +0 -0
  326. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_delegation.py +0 -0
  327. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_deps_models.py +0 -0
  328. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_deps_partition.py +0 -0
  329. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_review.py +0 -0
  330. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_review_expectation.py +0 -0
  331. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_task_models.py +0 -0
  332. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_workflow_models.py +0 -0
  333. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_permission_mode.py +0 -0
  334. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_providers/__init__.py +0 -0
  335. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_providers/test_clickup.py +0 -0
  336. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_providers/test_github.py +0 -0
  337. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_providers/test_github_pr.py +0 -0
  338. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_providers/test_markdown.py +0 -0
  339. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_scripts/__init__.py +0 -0
  340. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_scripts/test_changelog.py +0 -0
  341. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/__init__.py +0 -0
  342. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_ai_resolution.py +0 -0
  343. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
  344. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_batch_pr_index.py +0 -0
  345. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_batch_review_service.py +0 -0
  346. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_allowlist.py +0 -0
  347. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
  348. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
  349. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
  350. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
  351. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
  352. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bot_trigger.py +0 -0
  353. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_catchup.py +0 -0
  354. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
  355. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_check.py +0 -0
  356. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
  357. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
  358. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_delegation_service.py +0 -0
  359. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_deps_service.py +0 -0
  360. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_documentation_receipt.py +0 -0
  361. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_done_gates.py +0 -0
  362. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_done_idempotent.py +0 -0
  363. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_done_plan_flag.py +0 -0
  364. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
  365. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
  366. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
  367. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
  368. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
  369. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_implementation_service.py +0 -0
  370. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
  371. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_init.py +0 -0
  372. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  373. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
  374. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_knowledge_search.py +0 -0
  375. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_knowledge_service.py +0 -0
  376. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
  377. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_no_direct_git.py +0 -0
  378. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_plan_service.py +0 -0
  379. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
  380. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
  381. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
  382. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_pr_summary_path.py +0 -0
  383. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
  384. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_preserve_session_data.py +0 -0
  385. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_prompt_delivery.py +0 -0
  386. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_push_recovery.py +0 -0
  387. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
  388. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_resume_autonomy.py +0 -0
  389. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_cycle_service.py +0 -0
  390. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_delegation_service.py +0 -0
  391. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_receipts.py +0 -0
  392. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_records.py +0 -0
  393. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_status_block.py +0 -0
  394. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_skill_diagnostics_service.py +0 -0
  395. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_skill_invocation_service.py +0 -0
  396. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_smart_start.py +0 -0
  397. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_smart_start_resume.py +0 -0
  398. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_stale_base_surface.py +0 -0
  399. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_sync_base_branch.py +0 -0
  400. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_task_service.py +0 -0
  401. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
  402. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
  403. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_crossby_contract.py +0 -0
  404. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_doc_targets.py +0 -0
  405. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_dynamic_skills.py +0 -0
  406. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_generic_builtin_boundaries.py +0 -0
  407. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
  408. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
  409. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_pointer.py +0 -0
  410. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_review_budget_partial.py +0 -0
  411. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/__init__.py +0 -0
  412. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_body_markers.py +0 -0
  413. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_conventional.py +0 -0
  414. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_filelock.py +0 -0
  415. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_gitref.py +0 -0
  416. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_http.py +0 -0
  417. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_install.py +0 -0
  418. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_markdown.py +0 -0
  419. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_markers.py +0 -0
  420. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_plan_validation.py +0 -0
  421. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_process.py +0 -0
  422. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_prompts.py +0 -0
  423. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_runtime_env.py +0 -0
  424. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_slug.py +0 -0
  425. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_stale_base.py +0 -0
  426. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_terminal.py +0 -0
  427. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_terminal_launch.py +0 -0
  428. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_update_check.py +0 -0
  429. {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_yolo.py +0 -0
@@ -10,6 +10,10 @@ ai:
10
10
  default_model: gpt-5.6-terra
11
11
  effort: xhigh
12
12
  permission_mode: yolo
13
+ plan:
14
+ tool: codex
15
+ model: gpt-5.6-sol
16
+ effort: high
13
17
  deps:
14
18
  mode: headless
15
19
  timeout: 900
@@ -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.2] — 2026-09-09
8
+
9
+ ### Bug Fixes
10
+
11
+ - keep retained effort editable in PR-comment retry sessions (#507) (8daabc8)
12
+
13
+ ## [v1.2.1] — 2026-09-08
14
+
15
+ ### Chores
16
+
17
+ - use sol high for planning (beec132)
18
+
7
19
  ## [v1.2.0] — 2026-09-08
8
20
 
9
21
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: wade-cli
3
- Version: 1.2.0
3
+ Version: 1.2.2
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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "wade-cli"
7
- version = "1.2.0"
7
+ version = "1.2.2"
8
8
  description = "WADE — Workflow for AI-Driven Engineering"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,3 +1,3 @@
1
1
  """WADE (Workflow for AI-Driven Engineering) — AI-agent-driven git workflow management CLI."""
2
2
 
3
- __version__ = "1.2.0"
3
+ __version__ = "1.2.2"
@@ -88,11 +88,12 @@ from wade.utils.terminal import (
88
88
 
89
89
  logger = structlog.get_logger()
90
90
 
91
- # ``None`` means no caller choice, which lets ``resolve_effort`` read config.
92
- # The review confirmation UI also offers a distinct "none — use tool default"
93
- # choice; its value must survive a wait/relaunch without being mistaken for the
94
- # unset case. This string is accepted by the same ``--effort`` option used in
95
- # the recovery command, but is private to this review-session handoff.
91
+ # ``None`` means no caller or retry choice, which lets ``resolve_effort`` read
92
+ # config. The review confirmation UI also offers a distinct "none — use tool
93
+ # default" choice; its value must survive a wait/relaunch without being
94
+ # mistaken for the unset case. This string is accepted by the public
95
+ # ``--effort`` option used in a recovery command, but is private to this
96
+ # review-session handoff.
96
97
  _EXPLICIT_DEFAULT_EFFORT = "none"
97
98
 
98
99
 
@@ -1266,9 +1267,15 @@ def start(
1266
1267
  tool=resolved_tool,
1267
1268
  complexity=task.complexity.value if task.complexity else None,
1268
1269
  )
1270
+ # A retry payload and a CLI override deliberately mean different things.
1271
+ # ``effort_explicit`` says this invocation received ``--effort`` and locks
1272
+ # the selector; a non-None ``effort`` can also be a prior UI selection that
1273
+ # must remain editable. Its presence, rather than CLI explicitness, decodes
1274
+ # the UI's retained "none — use tool default" sentinel.
1275
+ effort_payload_present = effort is not None
1269
1276
  resolved_effort = (
1270
1277
  None
1271
- if effort_explicit and effort == _EXPLICIT_DEFAULT_EFFORT
1278
+ if effort == _EXPLICIT_DEFAULT_EFFORT
1272
1279
  else resolve_effort(
1273
1280
  effort,
1274
1281
  config,
@@ -1341,13 +1348,13 @@ def start(
1341
1348
  )
1342
1349
 
1343
1350
  # Configuration-derived effort should continue to re-resolve when the user
1344
- # waits for a later review. Preserve a caller's explicit override, or an
1345
- # actual change made in the confirmation UI, without promoting an implicit
1346
- # default to an explicit argument.
1347
- retained_effort_explicit = effort_explicit or resolved_effort != initial_effort
1351
+ # waits for a later review. Preserve a retry/CLI payload, or an actual
1352
+ # confirmation-UI change, without promoting either a retained UI choice or
1353
+ # an implicit configuration value into a CLI override.
1354
+ should_retain_effort_payload = effort_payload_present or resolved_effort != initial_effort
1348
1355
  retained_effort = (
1349
1356
  (resolved_effort.value if resolved_effort is not None else _EXPLICIT_DEFAULT_EFFORT)
1350
- if retained_effort_explicit
1357
+ if should_retain_effort_payload
1351
1358
  else None
1352
1359
  )
1353
1360
 
@@ -1531,7 +1538,7 @@ def start(
1531
1538
  ai_explicit=ai_explicit,
1532
1539
  model_explicit=model_explicit,
1533
1540
  effort=retained_effort,
1534
- effort_explicit=retained_effort_explicit,
1541
+ effort_explicit=effort_explicit,
1535
1542
  permission_mode=resolved_permission_mode.value,
1536
1543
  permission_mode_explicit=permission_mode_explicit,
1537
1544
  sandbox=sandbox,
@@ -1765,9 +1772,11 @@ def _post_review_lifecycle(
1765
1772
  ) -> None:
1766
1773
  """Post-review lifecycle menu: Merge PR or wait for new reviews.
1767
1774
 
1768
- Explicit effort and sandbox selections must survive a "wait for new
1769
- reviews" re-launch rather than re-resolving from configuration. ``None``
1770
- (unset) still re-resolves, matching the non-explicit permission-mode path.
1775
+ A retained effort payload and sandbox selection must survive a "wait for
1776
+ new reviews" re-launch rather than re-resolving from configuration.
1777
+ ``effort_explicit`` separately records a real CLI override, which is the
1778
+ only source that locks the effort selector. ``None`` (unset) still
1779
+ re-resolves, matching the non-explicit permission-mode path.
1771
1780
  """
1772
1781
  from wade.ui import prompts
1773
1782
 
@@ -642,7 +642,7 @@ class TestReviewServiceStart:
642
642
  assert mock_post.call_args.kwargs["effort"] is None
643
643
  assert mock_post.call_args.kwargs["effort_explicit"] is False
644
644
 
645
- def test_explicit_default_effort_survives_waiting_for_reviews(
645
+ def test_ui_default_effort_survives_waiting_for_reviews(
646
646
  self, tmp_path: Path, mock_setup: dict[str, MagicMock]
647
647
  ) -> None:
648
648
  """Choosing the UI's tool default must override a configured effort later."""
@@ -672,7 +672,95 @@ class TestReviewServiceStart:
672
672
  assert start(target="42") is True
673
673
 
674
674
  assert mock_post.call_args.kwargs["effort"] == "none"
675
- assert mock_post.call_args.kwargs["effort_explicit"] is True
675
+ assert mock_post.call_args.kwargs["effort_explicit"] is False
676
+
677
+ def test_retained_effort_is_preselected_editable_and_re_retained(
678
+ self, tmp_path: Path, mock_setup: dict[str, MagicMock]
679
+ ) -> None:
680
+ """A retained UI level stays editable and survives another unchanged retry."""
681
+ from crossby.models.ai import AIToolID, EffortLevel
682
+
683
+ from wade.services.ai_resolution import confirm_ai_selection
684
+
685
+ mock_setup[
686
+ "get_comprehensive_review_status"
687
+ ].return_value = self._changes_requested_status()
688
+ mock_setup["resolve_ai_tool"].return_value = "codex"
689
+ # Use the real confirmation UI behind the fixture's call spy so this
690
+ # exercises the selector that the next start() invocation presents.
691
+ mock_setup["confirm_ai_selection"].side_effect = confirm_ai_selection
692
+ adapter = MagicMock()
693
+ caps = adapter.capabilities.return_value
694
+ caps.supports_effort = True
695
+ caps.supports_accept_edits = False
696
+ caps.supports_auto = False
697
+ caps.supports_yolo = False
698
+ caps.blocks_until_exit = False
699
+ adapter.launch.return_value = 0
700
+ menu_items_seen: list[list[str]] = []
701
+
702
+ def select_proceed(_title: str, items: list[str], **_kwargs: object) -> int:
703
+ menu_items_seen.append(items)
704
+ return items.index("Proceed")
705
+
706
+ with (
707
+ patch("wade.services.review_service.resolve_effort", return_value=EffortLevel.XHIGH),
708
+ patch("wade.services.review_service.resolve_sandbox", return_value=False),
709
+ patch("crossby.ai_tools.AbstractAITool.get", return_value=adapter),
710
+ patch(
711
+ "crossby.ai_tools.AbstractAITool.detect_installed",
712
+ return_value=[AIToolID.CODEX],
713
+ ),
714
+ patch("wade.services.review_service.deliver_prompt_if_needed"),
715
+ patch("wade.ui.prompts.is_tty", return_value=True),
716
+ patch("wade.ui.prompts.select", side_effect=select_proceed),
717
+ patch("wade.ui.prompts.confirm", return_value=True),
718
+ patch("wade.services.review_service._post_review_lifecycle") as mock_post,
719
+ ):
720
+ assert start(target="42", effort="xhigh", effort_explicit=False) is True
721
+
722
+ confirm_kwargs = mock_setup["confirm_ai_selection"].call_args.kwargs
723
+ assert confirm_kwargs["resolved_effort"] is EffortLevel.XHIGH
724
+ assert confirm_kwargs["effort_explicit"] is False
725
+ assert "Change effort" in menu_items_seen[0]
726
+ # Proceeding with the retained selection must not drop it on the next wait.
727
+ assert mock_post.call_args.kwargs["effort"] == "xhigh"
728
+ assert mock_post.call_args.kwargs["effort_explicit"] is False
729
+
730
+ def test_retained_tool_default_bypasses_config_and_stays_editable(
731
+ self, tmp_path: Path, mock_setup: dict[str, MagicMock]
732
+ ) -> None:
733
+ """A retained ``none`` is distinct from no retry payload and never locks the picker."""
734
+ mock_setup[
735
+ "get_comprehensive_review_status"
736
+ ].return_value = self._changes_requested_status()
737
+ mock_setup["resolve_ai_tool"].return_value = "codex"
738
+ mock_setup["confirm_ai_selection"].return_value = (
739
+ "codex",
740
+ None,
741
+ None,
742
+ PermissionMode.DEFAULT,
743
+ )
744
+ adapter = MagicMock()
745
+ adapter.launch.return_value = 0
746
+ adapter.capabilities.return_value.blocks_until_exit = False
747
+
748
+ with (
749
+ patch("wade.services.review_service.resolve_effort") as mock_resolve_effort,
750
+ patch("wade.services.review_service.resolve_sandbox", return_value=False),
751
+ patch("crossby.ai_tools.AbstractAITool.get", return_value=adapter),
752
+ patch("wade.services.review_service.deliver_prompt_if_needed"),
753
+ patch("wade.ui.prompts.confirm", return_value=True),
754
+ patch("wade.services.review_service._post_review_lifecycle") as mock_post,
755
+ ):
756
+ assert start(target="42", effort="none", effort_explicit=False) is True
757
+
758
+ mock_resolve_effort.assert_not_called()
759
+ confirm_kwargs = mock_setup["confirm_ai_selection"].call_args.kwargs
760
+ assert confirm_kwargs["resolved_effort"] is None
761
+ assert confirm_kwargs["effort_explicit"] is False
762
+ assert mock_post.call_args.kwargs["effort"] == "none"
763
+ assert mock_post.call_args.kwargs["effort_explicit"] is False
676
764
 
677
765
  def test_detached_launch_receives_worktree_context(
678
766
  self, tmp_path: Path, mock_setup: dict[str, MagicMock]
@@ -781,7 +869,7 @@ class TestReviewServiceStart:
781
869
  assert mock_start.call_args.kwargs["sandbox"] is False
782
870
 
783
871
  def test_post_lifecycle_relaunch_forwards_confirmed_effort(self, tmp_path: Path) -> None:
784
- """A review re-launch keeps the effort selected in the first session."""
872
+ """A UI-confirmed effort survives a re-launch without locking its picker."""
785
873
  from wade.services.review_service import PollOutcome
786
874
 
787
875
  with (
@@ -801,15 +889,13 @@ class TestReviewServiceStart:
801
889
  99,
802
890
  MagicMock(),
803
891
  effort="high",
804
- effort_explicit=True,
892
+ effort_explicit=False,
805
893
  )
806
894
 
807
895
  assert mock_start.call_args.kwargs["effort"] == "high"
808
- assert mock_start.call_args.kwargs["effort_explicit"] is True
896
+ assert mock_start.call_args.kwargs["effort_explicit"] is False
809
897
 
810
- def test_post_lifecycle_relaunch_forwards_explicit_tool_default_effort(
811
- self, tmp_path: Path
812
- ) -> None:
898
+ def test_post_lifecycle_relaunch_forwards_ui_tool_default_effort(self, tmp_path: Path) -> None:
813
899
  """The explicit default is distinct from an unset effort override."""
814
900
  from wade.services.review_service import PollOutcome
815
901
 
@@ -830,11 +916,11 @@ class TestReviewServiceStart:
830
916
  99,
831
917
  MagicMock(),
832
918
  effort="none",
833
- effort_explicit=True,
919
+ effort_explicit=False,
834
920
  )
835
921
 
836
922
  assert mock_start.call_args.kwargs["effort"] == "none"
837
- assert mock_start.call_args.kwargs["effort_explicit"] is True
923
+ assert mock_start.call_args.kwargs["effort_explicit"] is False
838
924
 
839
925
  def test_resolves_worktree_by_issue_when_title_drifted(
840
926
  self, mock_setup: dict[str, MagicMock]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes