wade-cli 1.1.2__tar.gz → 1.2.0__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 (431) hide show
  1. {wade_cli-1.1.2 → wade_cli-1.2.0}/.wade.yml +20 -32
  2. {wade_cli-1.1.2 → wade_cli-1.2.0}/AGENTS.md +2 -2
  3. {wade_cli-1.1.2 → wade_cli-1.2.0}/CHANGELOG.md +12 -0
  4. {wade_cli-1.1.2 → wade_cli-1.2.0}/KNOWLEDGE.ratings.jsonl +6 -0
  5. {wade_cli-1.1.2 → wade_cli-1.2.0}/PKG-INFO +14 -5
  6. {wade_cli-1.1.2 → wade_cli-1.2.0}/README.md +13 -4
  7. {wade_cli-1.1.2 → wade_cli-1.2.0}/docs/dev/architecture.md +10 -1
  8. {wade_cli-1.1.2 → wade_cli-1.2.0}/docs/dev/workflows-and-skills.md +33 -3
  9. {wade_cli-1.1.2 → wade_cli-1.2.0}/pyproject.toml +1 -1
  10. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/__init__.py +1 -1
  11. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/workflow.py +1 -1
  12. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/batch_review_service.py +1 -0
  13. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/review_delegation_service.py +9 -0
  14. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/skill_invocation_service.py +26 -21
  15. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/skills/catalog.py +1 -0
  16. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/skills/materializer.py +16 -4
  17. wade_cli-1.2.0/templates/prompts/review-finding-admission.md +13 -0
  18. wade_cli-1.2.0/templates/prompts/review-result-batch.md +2 -0
  19. wade_cli-1.2.0/templates/prompts/review-result-code.md +3 -0
  20. wade_cli-1.2.0/templates/prompts/review-result-deps.md +3 -0
  21. wade_cli-1.2.0/templates/prompts/review-result-full-branch.md +5 -0
  22. wade_cli-1.2.0/templates/prompts/review-result-implementation.md +3 -0
  23. wade_cli-1.2.0/templates/prompts/review-result-plan.md +4 -0
  24. wade_cli-1.2.0/templates/prompts/review-result-pr-comments.md +2 -0
  25. wade_cli-1.2.0/templates/skills/code-review/SKILL.md +19 -0
  26. wade_cli-1.2.0/templates/skills/feedback-fix-review/SKILL.md +16 -0
  27. wade_cli-1.2.0/templates/skills/plan-review/SKILL.md +18 -0
  28. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/skills/review-comments/SKILL.md +7 -5
  29. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/test_dynamic_skill_sessions.py +116 -0
  30. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_skills_session_cli.py +2 -1
  31. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_models/test_workflow_models.py +19 -0
  32. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_review_delegation_service.py +48 -0
  33. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_skill_diagnostics_service.py +2 -1
  34. wade_cli-1.2.0/tests/unit/test_services/test_skill_invocation_service.py +162 -0
  35. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_skills/test_dynamic_skills.py +20 -0
  36. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_skills/test_generic_builtin_boundaries.py +4 -0
  37. wade_cli-1.1.2/templates/skills/code-review/SKILL.md +0 -18
  38. wade_cli-1.1.2/templates/skills/plan-review/SKILL.md +0 -17
  39. {wade_cli-1.1.2 → wade_cli-1.2.0}/.gitattributes +0 -0
  40. {wade_cli-1.1.2 → wade_cli-1.2.0}/.github/workflows/auto-version.yml +0 -0
  41. {wade_cli-1.1.2 → wade_cli-1.2.0}/.github/workflows/ci.yml +0 -0
  42. {wade_cli-1.1.2 → wade_cli-1.2.0}/.github/workflows/pr-title-lint.yml +0 -0
  43. {wade_cli-1.1.2 → wade_cli-1.2.0}/.github/workflows/publish.yml +0 -0
  44. {wade_cli-1.1.2 → wade_cli-1.2.0}/.github/workflows/release.yml +0 -0
  45. {wade_cli-1.1.2 → wade_cli-1.2.0}/.gitignore +0 -0
  46. {wade_cli-1.1.2 → wade_cli-1.2.0}/.pre-commit-config.yaml +0 -0
  47. {wade_cli-1.1.2 → wade_cli-1.2.0}/CONTRIBUTING.md +0 -0
  48. {wade_cli-1.1.2 → wade_cli-1.2.0}/KNOWLEDGE.md +0 -0
  49. {wade_cli-1.1.2 → wade_cli-1.2.0}/assets/wade.png +0 -0
  50. {wade_cli-1.1.2 → wade_cli-1.2.0}/docker-compose.e2e.yml +0 -0
  51. {wade_cli-1.1.2 → wade_cli-1.2.0}/docs/dev/documentation-policies.md +0 -0
  52. {wade_cli-1.1.2 → wade_cli-1.2.0}/docs/dev/extending.md +0 -0
  53. {wade_cli-1.1.2 → wade_cli-1.2.0}/docs/dev/skills-system.md +0 -0
  54. {wade_cli-1.1.2 → wade_cli-1.2.0}/docs/dev/testing.md +0 -0
  55. {wade_cli-1.1.2 → wade_cli-1.2.0}/install.sh +0 -0
  56. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/auto_version.py +0 -0
  57. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/changelog.py +0 -0
  58. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/check-all.sh +0 -0
  59. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/check.sh +0 -0
  60. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/fmt.sh +0 -0
  61. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/hooks/pre-push +0 -0
  62. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/install-hooks.sh +0 -0
  63. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/release.sh +0 -0
  64. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/setup-worktree.sh +0 -0
  65. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/test-concurrency.sh +0 -0
  66. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/test-e2e-docker.sh +0 -0
  67. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/test-e2e.sh +0 -0
  68. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/test-live-ai-taskr.sh +0 -0
  69. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/test-live-ai.sh +0 -0
  70. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/test-live-gh.sh +0 -0
  71. {wade_cli-1.1.2 → wade_cli-1.2.0}/scripts/test.sh +0 -0
  72. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/__main__.py +0 -0
  73. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/__init__.py +0 -0
  74. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/admin.py +0 -0
  75. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/autocomplete.py +0 -0
  76. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/deps_session.py +0 -0
  77. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/hook.py +0 -0
  78. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/implementation_session.py +0 -0
  79. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/knowledge.py +0 -0
  80. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/main.py +0 -0
  81. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/plan_session.py +0 -0
  82. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/review.py +0 -0
  83. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/review_pr_comments_session.py +0 -0
  84. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/session.py +0 -0
  85. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/session_shared.py +0 -0
  86. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/skills.py +0 -0
  87. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/task.py +0 -0
  88. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/cli/worktree.py +0 -0
  89. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/config/__init__.py +0 -0
  90. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/config/loader.py +0 -0
  91. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/config/migrations.py +0 -0
  92. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/config/schema.py +0 -0
  93. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/git/__init__.py +0 -0
  94. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/git/branch.py +0 -0
  95. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/git/hooks.py +0 -0
  96. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/git/pr.py +0 -0
  97. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/git/repo.py +0 -0
  98. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/git/stash.py +0 -0
  99. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/git/sync.py +0 -0
  100. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/git/worktree.py +0 -0
  101. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/hooks/__init__.py +0 -0
  102. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/hooks/cli.py +0 -0
  103. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/hooks/policies.py +0 -0
  104. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/logging/__init__.py +0 -0
  105. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/logging/context.py +0 -0
  106. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/logging/setup.py +0 -0
  107. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/__init__.py +0 -0
  108. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/batch.py +0 -0
  109. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/config.py +0 -0
  110. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/delegation.py +0 -0
  111. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/deps.py +0 -0
  112. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/events.py +0 -0
  113. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/hooks.py +0 -0
  114. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/permission.py +0 -0
  115. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/readiness.py +0 -0
  116. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/review.py +0 -0
  117. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/review_cycle.py +0 -0
  118. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/session.py +0 -0
  119. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/session_manifest.py +0 -0
  120. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/skill.py +0 -0
  121. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/task.py +0 -0
  122. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/models/worktree.py +0 -0
  123. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/providers/__init__.py +0 -0
  124. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/providers/_pr_delegate.py +0 -0
  125. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/providers/base.py +0 -0
  126. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/providers/clickup.py +0 -0
  127. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/providers/github.py +0 -0
  128. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/providers/markdown.py +0 -0
  129. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/providers/registry.py +0 -0
  130. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/__init__.py +0 -0
  131. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/ai_resolution.py +0 -0
  132. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/bot_trigger.py +0 -0
  133. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/check_service.py +0 -0
  134. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/delegation_service.py +0 -0
  135. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/deps_service.py +0 -0
  136. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/documentation_receipt_service.py +0 -0
  137. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/__init__.py +0 -0
  138. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/_shared.py +0 -0
  139. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/batch.py +0 -0
  140. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/bootstrap.py +0 -0
  141. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/cleanup.py +0 -0
  142. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/core.py +0 -0
  143. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/done.py +0 -0
  144. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/draft_pr.py +0 -0
  145. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/lifecycle.py +0 -0
  146. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/sync.py +0 -0
  147. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/implementation_service/usage_tracking.py +0 -0
  148. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/init_service/__init__.py +0 -0
  149. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/init_service/auth.py +0 -0
  150. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/init_service/commands.py +0 -0
  151. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/init_service/config_io.py +0 -0
  152. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/init_service/manifest.py +0 -0
  153. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/init_service/migrations.py +0 -0
  154. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/init_service/prompts_ai.py +0 -0
  155. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/init_service/prompts_setup.py +0 -0
  156. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/init_service/shell.py +0 -0
  157. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/knowledge_recovery.py +0 -0
  158. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/knowledge_search.py +0 -0
  159. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/knowledge_service.py +0 -0
  160. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/plan_service.py +0 -0
  161. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/prompt_delivery.py +0 -0
  162. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/review_cycle_service.py +0 -0
  163. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/review_record_service.py +0 -0
  164. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/review_service.py +0 -0
  165. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/review_settle.py +0 -0
  166. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/session_composition_service.py +0 -0
  167. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/skill_diagnostics_service.py +0 -0
  168. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/smart_start.py +0 -0
  169. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/services/task_service.py +0 -0
  170. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/skills/__init__.py +0 -0
  171. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/skills/discovery.py +0 -0
  172. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/skills/doc_targets.py +0 -0
  173. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/skills/installer.py +0 -0
  174. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/skills/pointer.py +0 -0
  175. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/skills/resolver.py +0 -0
  176. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/skills/validation.py +0 -0
  177. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/ui/__init__.py +0 -0
  178. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/ui/console.py +0 -0
  179. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/ui/prompts.py +0 -0
  180. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/__init__.py +0 -0
  181. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/body_markers.py +0 -0
  182. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/clipboard.py +0 -0
  183. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/conventional.py +0 -0
  184. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/filelock.py +0 -0
  185. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/gitref.py +0 -0
  186. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/http.py +0 -0
  187. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/install.py +0 -0
  188. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/knowledge_file.py +0 -0
  189. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/markdown.py +0 -0
  190. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/markers.py +0 -0
  191. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/paths.py +0 -0
  192. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/plan_validation.py +0 -0
  193. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/process.py +0 -0
  194. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/runtime_env.py +0 -0
  195. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/safe_state.py +0 -0
  196. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/slug.py +0 -0
  197. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/stale_base.py +0 -0
  198. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/templates.py +0 -0
  199. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/terminal.py +0 -0
  200. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/token_usage_markdown.py +0 -0
  201. {wade_cli-1.1.2 → wade_cli-1.2.0}/src/wade/utils/update_check.py +0 -0
  202. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/agents-pointer.md +0 -0
  203. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/hooks/commit-msg +0 -0
  204. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/hooks/pre-commit +0 -0
  205. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/hooks/pre-push +0 -0
  206. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/prompts/deps-analysis.md +0 -0
  207. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/prompts/implement-context.md +0 -0
  208. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/prompts/plan-session.md +0 -0
  209. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/prompts/review-batch.md +0 -0
  210. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/prompts/review-code.md +0 -0
  211. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/prompts/review-plan.md +0 -0
  212. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/prompts/review-pr-comments.md +0 -0
  213. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/prompts/session-start-implement.md +0 -0
  214. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/prompts/session-start-plan.md +0 -0
  215. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/prompts/session-start-review.md +0 -0
  216. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/setup-worktree.sh.example +0 -0
  217. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/skills/batch-review/SKILL.md +0 -0
  218. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/skills/dependency-analysis/SKILL.md +0 -0
  219. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/skills/implementation/SKILL.md +0 -0
  220. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/skills/knowledge/SKILL.md +0 -0
  221. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/skills/planning/SKILL.md +0 -0
  222. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/skills/task/SKILL.md +0 -0
  223. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/skills/task/examples.md +0 -0
  224. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/skills/task/plan-format.md +0 -0
  225. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/skills/task/reference/session-summary-format.md +0 -0
  226. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/statusline-command.sh +0 -0
  227. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/_partials/completion.md +0 -0
  228. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/_partials/documentation-step.md +0 -0
  229. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/_partials/interaction-policy.md +0 -0
  230. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/_partials/knowledge-step.md +0 -0
  231. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/_partials/review-budget.md +0 -0
  232. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/implementation.md +0 -0
  233. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/plan.md +0 -0
  234. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/reference/documentation.md +0 -0
  235. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/reference/new-plan.md +0 -0
  236. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/reference/plan-output-contract.md +0 -0
  237. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/reference/pr-summary-format.md +0 -0
  238. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/reference/recovery.md +0 -0
  239. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/reference/session-summary-format.md +0 -0
  240. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/reference/tracking-issues.md +0 -0
  241. {wade_cli-1.1.2 → wade_cli-1.2.0}/templates/workflows/review-pr-comments.md +0 -0
  242. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/__init__.py +0 -0
  243. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/concurrency/__init__.py +0 -0
  244. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/concurrency/test_batch_multi_pr.py +0 -0
  245. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/concurrency/test_knowledge_merge.py +0 -0
  246. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/concurrency/test_lock_retry.py +0 -0
  247. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/concurrency/test_stash_race.py +0 -0
  248. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/conftest.py +0 -0
  249. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/__init__.py +0 -0
  250. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/_support.py +0 -0
  251. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/conftest.py +0 -0
  252. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/mock_gh_script.py +0 -0
  253. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/test_admin_contract.py +0 -0
  254. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/test_check_contract.py +0 -0
  255. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/test_implement_work_done_contract.py +0 -0
  256. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/test_knowledge_contract.py +0 -0
  257. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/test_mock_gh_contract.py +0 -0
  258. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/test_plan_contract.py +0 -0
  259. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/test_review_contract.py +0 -0
  260. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/test_smart_start_contract.py +0 -0
  261. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/test_task_contract.py +0 -0
  262. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/e2e/test_work_sync_list_contract.py +0 -0
  263. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
  264. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
  265. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/fixtures/transcripts/claude_session.txt +0 -0
  266. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/fixtures/transcripts/codex_session.txt +0 -0
  267. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  268. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/fixtures/transcripts/generic_session.txt +0 -0
  269. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/__init__.py +0 -0
  270. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/test_autostash.py +0 -0
  271. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/test_check.py +0 -0
  272. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/test_git.py +0 -0
  273. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/test_implementation_lifecycle.py +0 -0
  274. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/test_init.py +0 -0
  275. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/test_knowledge.py +0 -0
  276. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/test_markdown_provider.py +0 -0
  277. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/test_skill_context_budget.py +0 -0
  278. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/integration/test_skill_install.py +0 -0
  279. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/live/__init__.py +0 -0
  280. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/live/test_wade_live_ai.py +0 -0
  281. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/live/test_wade_live_ai_taskr.py +0 -0
  282. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/live/test_wade_live_gh.py +0 -0
  283. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/test_cli_basics.py +0 -0
  284. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/__init__.py +0 -0
  285. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/conftest.py +0 -0
  286. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/__init__.py +0 -0
  287. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_autocomplete.py +0 -0
  288. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
  289. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_done_review_hint.py +0 -0
  290. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
  291. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_review_cli.py +0 -0
  292. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_session_subapps.py +0 -0
  293. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_shell_init.py +0 -0
  294. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_task_cli.py +0 -0
  295. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
  296. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_cli/test_work_cli.py +0 -0
  297. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_config/__init__.py +0 -0
  298. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_config/test_bot_review_config.py +0 -0
  299. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_config/test_dynamic_skill_config.py +0 -0
  300. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_config/test_loader.py +0 -0
  301. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
  302. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_config/test_migrations.py +0 -0
  303. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  304. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_console.py +0 -0
  305. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_effort.py +0 -0
  306. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/__init__.py +0 -0
  307. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_all_patches_present.py +0 -0
  308. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_branch_list.py +0 -0
  309. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_branch_slugify.py +0 -0
  310. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_detached_worktree.py +0 -0
  311. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_is_merged_into.py +0 -0
  312. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_main_checkout_root.py +0 -0
  313. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_merge_count.py +0 -0
  314. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_pr_base.py +0 -0
  315. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_pr_lookup.py +0 -0
  316. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_pr_retry.py +0 -0
  317. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_pr_title.py +0 -0
  318. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_repo.py +0 -0
  319. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_reset_branch.py +0 -0
  320. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  321. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_stash_drop.py +0 -0
  322. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  323. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
  324. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_git/test_worktree_remove.py +0 -0
  325. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_hooks/__init__.py +0 -0
  326. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_hooks/test_hook_cli.py +0 -0
  327. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_hooks/test_policies.py +0 -0
  328. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
  329. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_hooks/test_session_start.py +0 -0
  330. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_models/__init__.py +0 -0
  331. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_models/test_batch.py +0 -0
  332. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_models/test_config_models.py +0 -0
  333. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_models/test_delegation.py +0 -0
  334. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_models/test_deps_models.py +0 -0
  335. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_models/test_deps_partition.py +0 -0
  336. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_models/test_review.py +0 -0
  337. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_models/test_review_expectation.py +0 -0
  338. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_models/test_task_models.py +0 -0
  339. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_permission_mode.py +0 -0
  340. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_providers/__init__.py +0 -0
  341. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_providers/test_clickup.py +0 -0
  342. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_providers/test_github.py +0 -0
  343. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_providers/test_github_pr.py +0 -0
  344. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_providers/test_markdown.py +0 -0
  345. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_scripts/__init__.py +0 -0
  346. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_scripts/test_changelog.py +0 -0
  347. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/__init__.py +0 -0
  348. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_ai_resolution.py +0 -0
  349. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
  350. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_batch_pr_index.py +0 -0
  351. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_batch_review_service.py +0 -0
  352. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_bootstrap_allowlist.py +0 -0
  353. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
  354. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
  355. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
  356. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
  357. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
  358. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_bot_trigger.py +0 -0
  359. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_catchup.py +0 -0
  360. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
  361. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_check.py +0 -0
  362. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
  363. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
  364. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_delegation_service.py +0 -0
  365. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_deps_service.py +0 -0
  366. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_documentation_receipt.py +0 -0
  367. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_done_gates.py +0 -0
  368. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_done_idempotent.py +0 -0
  369. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_done_plan_flag.py +0 -0
  370. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
  371. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
  372. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
  373. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
  374. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
  375. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_implementation_service.py +0 -0
  376. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
  377. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_init.py +0 -0
  378. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  379. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
  380. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_knowledge_search.py +0 -0
  381. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_knowledge_service.py +0 -0
  382. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
  383. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_no_direct_git.py +0 -0
  384. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_plan_service.py +0 -0
  385. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
  386. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
  387. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
  388. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_pr_summary_path.py +0 -0
  389. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
  390. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_preserve_session_data.py +0 -0
  391. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_prompt_delivery.py +0 -0
  392. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_push_recovery.py +0 -0
  393. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
  394. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_resume_autonomy.py +0 -0
  395. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_review_cycle_service.py +0 -0
  396. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_review_receipts.py +0 -0
  397. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_review_records.py +0 -0
  398. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_review_service.py +0 -0
  399. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_review_status_block.py +0 -0
  400. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_smart_start.py +0 -0
  401. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_smart_start_resume.py +0 -0
  402. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_stale_base_surface.py +0 -0
  403. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_sync_base_branch.py +0 -0
  404. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_task_service.py +0 -0
  405. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
  406. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
  407. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_skills/test_crossby_contract.py +0 -0
  408. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_skills/test_doc_targets.py +0 -0
  409. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
  410. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
  411. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_skills/test_pointer.py +0 -0
  412. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_skills/test_review_budget_partial.py +0 -0
  413. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/__init__.py +0 -0
  414. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_body_markers.py +0 -0
  415. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_conventional.py +0 -0
  416. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_filelock.py +0 -0
  417. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_gitref.py +0 -0
  418. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_http.py +0 -0
  419. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_install.py +0 -0
  420. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_markdown.py +0 -0
  421. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_markers.py +0 -0
  422. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_plan_validation.py +0 -0
  423. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_process.py +0 -0
  424. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_prompts.py +0 -0
  425. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_runtime_env.py +0 -0
  426. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_slug.py +0 -0
  427. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_stale_base.py +0 -0
  428. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_terminal.py +0 -0
  429. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_terminal_launch.py +0 -0
  430. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_utils/test_update_check.py +0 -0
  431. {wade_cli-1.1.2 → wade_cli-1.2.0}/tests/unit/test_yolo.py +0 -0
@@ -6,64 +6,52 @@ project:
6
6
  branch_prefix: feat
7
7
  merge_strategy: PR
8
8
  ai:
9
- default_tool: claude
10
- default_model: claude-opus-5
9
+ default_tool: codex
10
+ default_model: gpt-5.6-terra
11
11
  effort: xhigh
12
- plan:
13
- effort: xhigh
14
- yolo: true
15
- implement:
16
- yolo: true
12
+ permission_mode: yolo
17
13
  deps:
18
- tool: claude
19
- model: claude-sonnet-5
20
14
  mode: headless
21
- effort: high
22
15
  timeout: 900
23
16
  review_plan:
24
- tool: claude
25
- model: claude-sonnet-5
17
+ tool: antigravity-cli
18
+ model: gemini-3.8-flash
26
19
  mode: headless
27
20
  effort: high
28
21
  enabled: true
29
22
  timeout: 900
30
23
  review_implementation:
31
- tool: claude
32
- model: claude-sonnet-5
24
+ tool: antigravity-cli
25
+ model: gemini-3.8-flash
33
26
  mode: headless
34
27
  effort: high
35
28
  enabled: true
36
29
  timeout: 900
37
30
  review_batch:
38
- tool: claude
39
- model: claude-sonnet-5
40
31
  mode: interactive
41
- effort: high
42
32
  enabled: true
43
- yolo: true
44
- yolo: false
33
+ review_pr_comments:
34
+ enabled: true
45
35
  models:
46
- claude:
36
+ codex:
47
37
  easy:
48
- model: claude-haiku-4.5
49
- effort: max
38
+ model: gpt-5.6-terra
39
+ effort: xhigh
50
40
  medium:
51
- model: claude-sonnet-5
52
- effort: high
53
- complex:
54
- model: claude-sonnet-5
41
+ model: gpt-5.6-terra
55
42
  effort: xhigh
43
+ complex:
44
+ model: gpt-5.6-sol
45
+ effort: high
56
46
  very_complex:
57
- model: claude-opus-5
47
+ model: gpt-5.6-sol
58
48
  effort: xhigh
59
49
  provider:
60
50
  name: github
61
51
  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
52
+ auto_trigger: true
53
+ arrival_timeout: 900
54
+ ack_timeout: 900
67
55
  bots:
68
56
  - name: coderabbit
69
57
  trigger: '@coderabbitai review'
@@ -16,7 +16,7 @@ Two distinct worlds interact in this codebase. Always be clear which one you are
16
16
  | **the WADE repo** / **this project** | This source repository — `src/wade/`, `templates/`, `tests/`, `scripts/` |
17
17
  | **inited project** / **target project** | Any third-party repo that has run `wade init` to adopt the workflow |
18
18
  | **workflow templates** | Fixed WADE lifecycle files in `templates/workflows/`; rendered to `.wade/session/WORKFLOW.md` and never replaceable by skill configuration |
19
- | **methodology skill templates** | WADE-agnostic replaceable methods in `templates/skills/` (planning, implementation, review, and dependency analysis) |
19
+ | **methodology skill templates** | WADE-agnostic replaceable methods in `templates/skills/` (planning, implementation, feedback handling, lifecycle-specific closing review, and dependency analysis) |
20
20
  | **session skill snapshots** | Immutable copies of active and available skills under `.wade/session/skills/`, including project skills discovered from the worktree and main checkout |
21
21
  | **support skills** | Fixed WADE command-support skills projected into `.claude/skills/` per worktree bootstrap; they are not replaceable methodology |
22
22
  | **AGENTS.md pointer** | A short `## Git Workflow` block that **worktree bootstrap** injects into an inited project's `AGENTS.md` per session, not by `wade init` |
@@ -159,7 +159,7 @@ Before considering any work complete:
159
159
  - [ ] **Types + Lint** — `./scripts/check.sh` passes (or run both at once: `./scripts/check-all.sh`)
160
160
  - [ ] **`AGENTS.md`** — updated if architecture, conventions, or workflow changed
161
161
  - [ ] **`README.md`** — updated if user-facing behavior changed
162
- - [ ] **`templates/skills/`** — updated if agent-facing rules changed (plan-session for planning, implementation-session for implementation, review-pr-comments-session for reviews)
162
+ - [ ] **`templates/skills/`** — updated if agent-facing methodology changed (planning, implementation, feedback handling, or lifecycle-specific closing review)
163
163
  - [ ] **Commit** — uses conventional-commit prefix
164
164
 
165
165
  Note: for inited projects, the doc update pass is an explicit mandatory step in
@@ -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.0] — 2026-09-08
8
+
9
+ ### Features
10
+
11
+ - specialize review methodologies by lifecycle stage (#505) (75caed3)
12
+
13
+ ## [v1.1.3] — 2026-09-08
14
+
15
+ ### Chores
16
+
17
+ - configure wade workflow defaults (8062a91)
18
+
7
19
  ## [v1.1.2] — 2026-09-08
8
20
 
9
21
  ### Bug Fixes
@@ -172,3 +172,9 @@
172
172
  {"id": "65ee7eb64d81", "superseded_by": "54236b4243bc", "ts": "2026-09-04T22:14:17.907524+00:00"}
173
173
  {"dir": "up", "event_id": "bc0cace277f74e4490f28148eafb4070", "id": "4d419ec6629c", "ts": "2026-09-07T22:30:30.110983+00:00"}
174
174
  {"dir": "up", "event_id": "0901f7e84f80422488ee976fb7f54934", "id": "fb5582aa12e0", "ts": "2026-09-08T10:26:25.322775+00:00"}
175
+ {"dir": "stale", "event_id": "88622649b23240929d9baf2b4066f638", "id": "b6a3a637", "ts": "2026-09-08T18:20:11.337784+00:00"}
176
+ {"dir": "stale", "event_id": "06c9b65afb1e45d3869d35e69e3e2b44", "id": "455476d6", "ts": "2026-09-08T18:20:11.488322+00:00"}
177
+ {"dir": "stale", "event_id": "d70ec6cbeab648318f518055c2a57582", "id": "94ae0a8fd4c9", "ts": "2026-09-08T18:20:11.642192+00:00"}
178
+ {"dir": "stale", "event_id": "5fd6f7c8f26544249827eacae223694a", "id": "4d5fa933ffe6", "ts": "2026-09-08T18:20:11.796646+00:00"}
179
+ {"dir": "stale", "event_id": "e4417aa5f0064b3f9c7e47f3fdae4ffe", "id": "8a9bfc96", "ts": "2026-09-08T19:15:19.450727+00:00"}
180
+ {"dir": "stale", "event_id": "647e662229b04eb19f5a337d2c0a1d27", "id": "4d419ec6629c", "ts": "2026-09-08T19:15:19.602521+00:00"}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: wade-cli
3
- Version: 1.1.2
3
+ Version: 1.2.0
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
@@ -358,9 +358,10 @@ When a PR-comment session starts, WADE records its pre-edit commit and a feedbac
358
358
  snapshot under local `.wade/review-cycles/` state, outside the immutable session
359
359
  bundle. Re-fetching retains prior feedback while adding new feedback, but never
360
360
  advances that baseline. Its closing review receives the accumulated feedback and
361
- the cycle delta; unsafe, mismatched, stale, or merged lineage uses the full
362
- branch change instead. A successful `review-pr-comments-session done` clears
363
- the cycle so later feedback starts from the then-current PR head.
361
+ the cycle delta. Unsafe, mismatched, stale, or merged lineage instead uses the
362
+ complete branch change and its full-branch result contract, which overrides the
363
+ feedback-fix method's narrow scope. A successful `review-pr-comments-session
364
+ done` clears the cycle so later feedback starts from the then-current PR head.
364
365
 
365
366
  ### The auto-launched review session
366
367
 
@@ -1026,7 +1027,7 @@ Default replaceable methods:
1026
1027
  |---|---|---|
1027
1028
  | planning session | `builtin:planning` | `builtin:plan-review` |
1028
1029
  | implementation session | `builtin:implementation` | `builtin:code-review` |
1029
- | PR-comment session | `builtin:review-comments` | `builtin:code-review` |
1030
+ | PR-comment session | `builtin:review-comments` | `builtin:feedback-fix-review` |
1030
1031
  | batch review | `builtin:batch-review` | — |
1031
1032
  | dependency analysis | `builtin:dependency-analysis` | — |
1032
1033
 
@@ -1080,6 +1081,7 @@ sessions:
1080
1081
  review_pr_comments:
1081
1082
  skills:
1082
1083
  work: [builtin:review-comments]
1084
+ # Omit review to use builtin:feedback-fix-review.
1083
1085
 
1084
1086
  delegations:
1085
1087
  code_review:
@@ -1102,6 +1104,13 @@ different `delegations.code_review`/`plan_review` value for that session.
1102
1104
  Standalone review, batch, and dependency operations use their delegation
1103
1105
  binding. `wade skills resolve` prints every candidate and the winner.
1104
1106
 
1107
+ The shared `delegations.code_review.skills.work` setting is an explicit fallback
1108
+ for both implementation and PR-comment session REVIEW slots. It intentionally
1109
+ replaces the stage-specific built-in default—including
1110
+ `builtin:feedback-fix-review` for PR-comment sessions—unless that session sets
1111
+ its own `skills.review`; existing frozen sessions keep their recorded binding
1112
+ until explicitly refreshed.
1113
+
1105
1114
  Tool-native roots receive only fixed command-support skills. Session lifecycle
1106
1115
  comes from the rendered workflow, while default or custom methodology is frozen
1107
1116
  inside the session bundle. Deprecated phase skills are not installed.
@@ -322,9 +322,10 @@ When a PR-comment session starts, WADE records its pre-edit commit and a feedbac
322
322
  snapshot under local `.wade/review-cycles/` state, outside the immutable session
323
323
  bundle. Re-fetching retains prior feedback while adding new feedback, but never
324
324
  advances that baseline. Its closing review receives the accumulated feedback and
325
- the cycle delta; unsafe, mismatched, stale, or merged lineage uses the full
326
- branch change instead. A successful `review-pr-comments-session done` clears
327
- the cycle so later feedback starts from the then-current PR head.
325
+ the cycle delta. Unsafe, mismatched, stale, or merged lineage instead uses the
326
+ complete branch change and its full-branch result contract, which overrides the
327
+ feedback-fix method's narrow scope. A successful `review-pr-comments-session
328
+ done` clears the cycle so later feedback starts from the then-current PR head.
328
329
 
329
330
  ### The auto-launched review session
330
331
 
@@ -990,7 +991,7 @@ Default replaceable methods:
990
991
  |---|---|---|
991
992
  | planning session | `builtin:planning` | `builtin:plan-review` |
992
993
  | implementation session | `builtin:implementation` | `builtin:code-review` |
993
- | PR-comment session | `builtin:review-comments` | `builtin:code-review` |
994
+ | PR-comment session | `builtin:review-comments` | `builtin:feedback-fix-review` |
994
995
  | batch review | `builtin:batch-review` | — |
995
996
  | dependency analysis | `builtin:dependency-analysis` | — |
996
997
 
@@ -1044,6 +1045,7 @@ sessions:
1044
1045
  review_pr_comments:
1045
1046
  skills:
1046
1047
  work: [builtin:review-comments]
1048
+ # Omit review to use builtin:feedback-fix-review.
1047
1049
 
1048
1050
  delegations:
1049
1051
  code_review:
@@ -1066,6 +1068,13 @@ different `delegations.code_review`/`plan_review` value for that session.
1066
1068
  Standalone review, batch, and dependency operations use their delegation
1067
1069
  binding. `wade skills resolve` prints every candidate and the winner.
1068
1070
 
1071
+ The shared `delegations.code_review.skills.work` setting is an explicit fallback
1072
+ for both implementation and PR-comment session REVIEW slots. It intentionally
1073
+ replaces the stage-specific built-in default—including
1074
+ `builtin:feedback-fix-review` for PR-comment sessions—unless that session sets
1075
+ its own `skills.review`; existing frozen sessions keep their recorded binding
1076
+ until explicitly refreshed.
1077
+
1069
1078
  Tool-native roots receive only fixed command-support skills. Session lifecycle
1070
1079
  comes from the rendered workflow, while default or custom methodology is frozen
1071
1080
  inside the session bundle. Deprecated phase skills are not installed.
@@ -154,6 +154,13 @@ for the ownership boundary, typed registries, precedence, manifests, and review
154
154
  record model; see [Skills, Snapshots, and Pointer System](skills-system.md) for
155
155
  discovery, support projection, and filesystem rules.
156
156
 
157
+ Closing-review methods are lifecycle-specific: `plan-review` validates an
158
+ implementation plan, `code-review` validates an implementation change, and
159
+ `feedback-fix-review` validates feedback-driven corrections. `review-comments`
160
+ remains the separate WORK method for verifying incoming review feedback before
161
+ editing. The service-owned bounded result contract, not a replaceable method,
162
+ admits only concrete material findings and fixes the review scope.
163
+
157
164
  > `templates/hooks/pre-push` is the completion-gate backstop script installed
158
165
  > per-worktree at `.wade/githooks/pre-push` (see *Completion Gates & the
159
166
  > `done`-marker* below).
@@ -824,7 +831,9 @@ the immutable session bundle. Re-fetching retains prior feedback and adds new
824
831
  feedback while preserving the baseline; a successful PR-comment `done` removes
825
832
  it. The closing review receives the accumulated feedback and cycle delta only
826
833
  after safe state, identity, ancestry, and merge-path checks. Any failed check
827
- emits a diagnostic and reviews the complete branch diff instead.
834
+ emits a diagnostic and reviews the complete branch diff instead. That fallback
835
+ also selects the full-branch result contract, which overrides the frozen
836
+ feedback-fix methodology's narrow scope.
828
837
 
829
838
  The capability remediation is intentionally tool-neutral: retain the sandbox
830
839
  and grant only the worktree Git metadata paths, GitHub credential/API route, or
@@ -40,7 +40,7 @@ Interactive sessions:
40
40
  |---|---|---|---|
41
41
  | `plan` | `builtin:planning` | `builtin:plan-review` | `plan.md` |
42
42
  | `implementation` | `builtin:implementation` | `builtin:code-review` | `implementation.md` |
43
- | `review-pr-comments` | `builtin:review-comments` | `builtin:code-review` | `review-pr-comments.md` |
43
+ | `review-pr-comments` | `builtin:review-comments` | `builtin:feedback-fix-review` | `review-pr-comments.md` |
44
44
 
45
45
  The `deps` session owns detached-worktree readiness and recovery but is explicitly
46
46
  non-interactive: it has no workflow template, launch prompt, SessionStart phase,
@@ -52,7 +52,7 @@ Delegations:
52
52
  | Delegation | Host behavior | Default method |
53
53
  |---|---|---|
54
54
  | `plan-review` | maps to a plan session's frozen REVIEW slot | `builtin:plan-review` |
55
- | `code-review` | maps to implementation/review session REVIEW | `builtin:code-review` |
55
+ | `code-review` | maps to implementation/review session REVIEW | `builtin:code-review` when standalone; the mapped session's frozen REVIEW binding otherwise |
56
56
  | `batch-review` | always foreign; no worktree is privileged | `builtin:batch-review` |
57
57
  | `dependency-analysis` | always foreign, including inside planning | `builtin:dependency-analysis` |
58
58
 
@@ -61,6 +61,12 @@ replace that reviewer during the review command; refresh the session binding
61
61
  explicitly. Foreign operations resolve independently and never inherit an
62
62
  unrelated host slot.
63
63
 
64
+ The default roles are deliberately distinct: planning WORK creates a plan,
65
+ plan REVIEW tests whether that plan can safely meet its goal, implementation
66
+ REVIEW examines material defects introduced by the planned change,
67
+ review-comment WORK verifies incoming claims before editing, and feedback-fix
68
+ REVIEW checks only those corrections and their directly affected behavior.
69
+
64
70
  ## Fixed workflow rendering
65
71
 
66
72
  Interactive bootstrap renders `.wade/session/WORKFLOW.md` from the session
@@ -102,6 +108,7 @@ sessions:
102
108
  review_pr_comments:
103
109
  skills:
104
110
  work: [builtin:review-comments]
111
+ # Omit review to use builtin:feedback-fix-review.
105
112
 
106
113
  delegations:
107
114
  plan_review:
@@ -139,6 +146,14 @@ A standalone/foreign delegation uses CLI, then
139
146
  and mapped delegation configure different reviewers, the session value wins for
140
147
  that session and diagnostics report the shadowed candidate.
141
148
 
149
+ The shared `delegations.code_review.skills.work` binding is deliberately the
150
+ fallback for both implementation and PR-comment session REVIEW slots. An
151
+ explicit value there therefore replaces their stage-specific built-in defaults,
152
+ including `builtin:feedback-fix-review` for PR-comment sessions, unless the
153
+ corresponding `sessions.<session>.skills.review` binding is configured. This
154
+ does not affect an already frozen session; refresh it explicitly to resolve a
155
+ new binding.
156
+
142
157
  Session commands accept repeatable `--skill` and `--review-skill` flags. Bounded
143
158
  review, batch, and deps commands accept repeatable `--skill`. Use `builtin:`,
144
159
  `project:`, or an exact repository-relative `path:` ref.
@@ -200,6 +215,17 @@ reviewer's repository working directory differ. Headless execution does not
200
215
  depend on native tool discovery. The fixed service owns tool/model selection,
201
216
  permissions, timeout, input collection, parsing, and side effects.
202
217
 
218
+ For mapped closing reviews, the service also supplies the frozen host-session
219
+ identity after the untrusted method text. That fixed result contract applies
220
+ the common finding-admission rule—concrete, material, evidenced failures only—
221
+ and narrows `code-review` to either implementation review or feedback-fix
222
+ review. Feedback-fix scope applies only when a PR-comment cycle has a validated
223
+ baseline; otherwise the full-branch result contract overrides the narrow method
224
+ and reviews the complete branch diff. A custom reviewer cannot turn a
225
+ feedback-fix review into whole-PR redesign when that validated scope exists,
226
+ and optional preferences, speculative hardening, pre-existing problems, and
227
+ unrelated cleanup are omitted rather than labeled as findings.
228
+
203
229
  Foreign operations persist a narrower delegation manifest below
204
230
  `.wade/operations/`. A successful synchronous operation removes its own bundle;
205
231
  a recoverable failure may preserve it. Session refresh never touches operation
@@ -252,7 +278,8 @@ cycle preserves its baseline and retains prior feedback while adding newly
252
278
  fetched feedback; successful `review-pr-comments-session done` removes the
253
279
  context. The closing review uses that accumulated feedback plus the cycle delta
254
280
  only after identity, ancestry, and merge-path validation; unreadable, mismatched,
255
- malformed, or unsafe state falls back to a full diff.
281
+ malformed, or unsafe state falls back to a full diff and the full-branch result
282
+ contract, which takes precedence over the feedback-fix methodology.
256
283
 
257
284
  Manifest, review, review-cycle, and documentation-gate state uses descriptor-relative,
258
285
  no-follow filesystem operations. Unsafe/malformed/unreadable state is absent for
@@ -287,6 +314,9 @@ policy.
287
314
  Planning remains independently strict: the parent service always parses and
288
315
  validates produced plan files, including salvage paths. `plan-session done` is
289
316
  helpful session telemetry, not authority over parent consumption.
317
+ `wade review plan` remains an advisory, agent-enforced method-review step: it
318
+ does not persist a binding-aware review receipt or add a plan-review completion
319
+ gate.
290
320
 
291
321
  ## Extension rules
292
322
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "wade-cli"
7
- version = "1.1.2"
7
+ version = "1.2.0"
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.1.2"
3
+ __version__ = "1.2.0"
@@ -234,7 +234,7 @@ SESSION_DEFINITIONS: dict[SessionKind, SessionDefinition] = {
234
234
  ),
235
235
  default_skills={
236
236
  SkillSlot.WORK: (SkillRef.model_validate("builtin:review-comments"),),
237
- SkillSlot.REVIEW: (SkillRef.model_validate("builtin:code-review"),),
237
+ SkillSlot.REVIEW: (SkillRef.model_validate("builtin:feedback-fix-review"),),
238
238
  },
239
239
  support_skills=("task", "knowledge"),
240
240
  readiness=ReadinessRequirements(
@@ -474,6 +474,7 @@ def run_coherence_review(
474
474
  sandbox=sandbox,
475
475
  delegation_kind=DelegationKind.BATCH_REVIEW,
476
476
  method_section=prepared.method_section,
477
+ host_session=prepared.host_session,
477
478
  input_label="Batch context",
478
479
  cwd=repo_root or Path.cwd(),
479
480
  # `wade review batch` takes the tracking issue as a required
@@ -283,6 +283,8 @@ def _run_review_delegation(
283
283
  sandbox: bool | None = None,
284
284
  delegation_kind: DelegationKind | None = None,
285
285
  method_section: str = "",
286
+ host_session: SessionKind | None = None,
287
+ feedback_fix_scope: bool = False,
286
288
  input_label: str = "Operation input",
287
289
  cwd: Path | None = None,
288
290
  trusted_dirs: list[str] | None = None,
@@ -317,6 +319,8 @@ def _run_review_delegation(
317
319
  input_label=input_label,
318
320
  input_content=content,
319
321
  budget_line=budget_line,
322
+ host_session=host_session,
323
+ feedback_fix_scope=feedback_fix_scope,
320
324
  )
321
325
  trusted = base.replace(
322
326
  "{review_budget}", budget_line or "No hard deadline — take the time you need."
@@ -594,6 +598,7 @@ def review_plan(
594
598
  sandbox=sandbox,
595
599
  delegation_kind=DelegationKind.PLAN_REVIEW,
596
600
  method_section=prepared.method_section,
601
+ host_session=prepared.host_session,
597
602
  input_label="Plan input",
598
603
  cwd=review_cwd,
599
604
  trusted_dirs=(
@@ -754,6 +759,7 @@ def _read_optional_plan(repo_root: Path) -> str | None:
754
759
  class _ReviewInputContext:
755
760
  committed_baseline: str | None = None
756
761
  feedback: str | None = None
762
+ feedback_fix_scope: bool = False
757
763
 
758
764
 
759
765
  def _pr_comment_review_context(repo_root: Path, head: str) -> _ReviewInputContext:
@@ -815,6 +821,7 @@ def _pr_comment_review_context(repo_root: Path, head: str) -> _ReviewInputContex
815
821
  return _ReviewInputContext(
816
822
  committed_baseline=cycle.context.baseline_commit,
817
823
  feedback=cycle.context.feedback,
824
+ feedback_fix_scope=True,
818
825
  )
819
826
 
820
827
 
@@ -1187,6 +1194,8 @@ def review_implementation(
1187
1194
  sandbox=sandbox,
1188
1195
  delegation_kind=DelegationKind.CODE_REVIEW,
1189
1196
  method_section=prepared.method_section,
1197
+ host_session=prepared.host_session,
1198
+ feedback_fix_scope=input_context.feedback_fix_scope,
1190
1199
  input_label="Scoped review input",
1191
1200
  cwd=repo_root,
1192
1201
  relaunch_skills=skills,
@@ -19,6 +19,7 @@ from wade.services.session_composition_service import (
19
19
  )
20
20
  from wade.skills.materializer import materialize_delegation_bundle
21
21
  from wade.skills.validation import SkillValidationError, inspect_skill
22
+ from wade.utils.templates import load_prompt_template
22
23
 
23
24
  MAX_DELEGATION_SKILL_CHARS = 8_000
24
25
  MAX_DELEGATION_ENVELOPE_CHARS = 10_000
@@ -145,6 +146,8 @@ def compose_delegation_prompt(
145
146
  input_label: str,
146
147
  input_content: str,
147
148
  budget_line: str | None = None,
149
+ host_session: SessionKind | None = None,
150
+ feedback_fix_scope: bool = False,
148
151
  ) -> str:
149
152
  """Build fixed contract + method + input + result without chained replacement."""
150
153
 
@@ -155,27 +158,25 @@ def compose_delegation_prompt(
155
158
  if "{review_budget}" in contract
156
159
  else contract
157
160
  )
158
- result_contracts = {
159
- DelegationKind.PLAN_REVIEW: (
160
- "Return concise actionable findings ordered by impact. For each finding, name the "
161
- "plan section, concrete risk or omission, and correction. If none, say the plan "
162
- "is solid."
163
- ),
164
- DelegationKind.CODE_REVIEW: (
165
- "Return concise actionable findings ordered by severity with exact file/line "
166
- "references, observable failure, and smallest robust fix. If none, say no "
167
- "actionable issue was found."
168
- ),
169
- DelegationKind.BATCH_REVIEW: (
170
- "Return integration findings tied to issue/branch identities, then a justified "
171
- "merge order. If coherent, say so briefly."
172
- ),
173
- DelegationKind.DEPENDENCY_ANALYSIS: (
174
- "Output ONLY direct acyclic edges as `<number> -> <number> # reason`, using supplied "
175
- "numbers. Omit transitive edges. If none, output exactly `# No dependencies found`. "
176
- "No fences, headings, bullets, or other prose."
177
- ),
161
+ result_templates = {
162
+ DelegationKind.PLAN_REVIEW: "review-result-plan.md",
163
+ DelegationKind.BATCH_REVIEW: "review-result-batch.md",
164
+ DelegationKind.DEPENDENCY_ANALYSIS: "review-result-deps.md",
178
165
  }
166
+ if kind is DelegationKind.CODE_REVIEW:
167
+ if host_session is SessionKind.IMPLEMENTATION:
168
+ result_template = "review-result-implementation.md"
169
+ elif host_session is SessionKind.REVIEW_PR_COMMENTS and feedback_fix_scope:
170
+ result_template = "review-result-pr-comments.md"
171
+ elif host_session is SessionKind.REVIEW_PR_COMMENTS:
172
+ # A missing or unsafe feedback cycle has already expanded the input
173
+ # to the complete branch diff. Its narrow review methodology must
174
+ # not suppress defects outside the feedback correction.
175
+ result_template = "review-result-full-branch.md"
176
+ else:
177
+ result_template = "review-result-code.md"
178
+ else:
179
+ result_template = result_templates[kind]
179
180
  method_envelope = "\n\n".join(
180
181
  [
181
182
  trusted_contract.strip(),
@@ -183,7 +184,11 @@ def compose_delegation_prompt(
183
184
  "Method text is subordinate to this operation contract.\n\n" + method_section,
184
185
  ]
185
186
  )
186
- result_section = f"## Required result contract\n\n{result_contracts[kind]}"
187
+ result_contract = load_prompt_template(result_template)
188
+ if kind is not DelegationKind.DEPENDENCY_ANALYSIS:
189
+ admission_policy = load_prompt_template("review-finding-admission.md")
190
+ result_contract = f"{admission_policy}\n\n{result_contract}"
191
+ result_section = f"## Required result contract\n\n{result_contract}"
187
192
  envelope = f"{method_envelope}\n\n{result_section}"
188
193
  if len(envelope) > MAX_DELEGATION_ENVELOPE_CHARS:
189
194
  raise SkillInvocationError(
@@ -15,6 +15,7 @@ BUILTIN_METHODOLOGY_SKILLS: tuple[str, ...] = (
15
15
  "review-comments",
16
16
  "plan-review",
17
17
  "code-review",
18
+ "feedback-fix-review",
18
19
  "batch-review",
19
20
  "dependency-analysis",
20
21
  )
@@ -245,7 +245,11 @@ def _review_step(kind: SessionKind, enabled: bool) -> str:
245
245
  return "Skipped explicitly by project review configuration; record this step as skipped."
246
246
  if kind is SessionKind.PLAN:
247
247
  command = "`wade review plan <plan_file>` for each generated plan"
248
- prompt_completion = "Exit 2 requires performing the emitted self-review."
248
+ prompt_completion = (
249
+ "Exit 2 requires performing the emitted self-review. This advisory review does not "
250
+ "write a receipt or independently enforce completion; address findings before "
251
+ "continuing with the plan workflow."
252
+ )
249
253
  else:
250
254
  command = "`wade review implementation` for the current commit"
251
255
  prompt_completion = (
@@ -260,12 +264,20 @@ def _review_step(kind: SessionKind, enabled: bool) -> str:
260
264
  else "If documentation, knowledge, or another later step creates a commit, repeat this "
261
265
  "review before done. "
262
266
  )
267
+ receipt_requirement = (
268
+ "The successful receipt must match the final pre-sync commit. "
269
+ if kind in {SessionKind.IMPLEMENTATION, SessionKind.REVIEW_PR_COMMENTS}
270
+ else ""
271
+ )
272
+ receipt_outcome = (
273
+ "A successful external review writes the deterministic binding-aware receipt."
274
+ if kind in {SessionKind.IMPLEMENTATION, SessionKind.REVIEW_PR_COMMENTS}
275
+ else ""
276
+ )
263
277
  return (
264
278
  f"Run {command}. The command loads only the frozen REVIEW methodology. "
265
279
  "Address actionable findings, commit changes, and re-review once after major fixes. "
266
- "The successful receipt must match the final pre-sync commit. "
267
- f"{convergence}{prompt_completion} A successful external review writes the deterministic "
268
- "binding-aware receipt."
280
+ f"{receipt_requirement}{convergence}{prompt_completion} {receipt_outcome}"
269
281
  )
270
282
 
271
283
 
@@ -0,0 +1,13 @@
1
+ ## Finding-admission policy
2
+
3
+ Report only a concrete, material failure tied to the reviewed artifact or change
4
+ that has evidence of a plausible observable failure or a violated requested
5
+ outcome, accepted plan, repository contract, or safety invariant. Omit
6
+ preferences, optional improvements, speculative hardening without a plausible
7
+ failure path, pre-existing problems, and unrelated scope; do not present them
8
+ as optional findings. Order qualifying findings concisely by impact. For each,
9
+ give the affected plan section, exact source file/line, or issue/branch identity
10
+ as appropriate; supporting evidence; the observable failure or violated
11
+ contract; and the smallest necessary correction. Group duplicate manifestations
12
+ of one cause. If nothing qualifies, state briefly that no material actionable
13
+ finding was found.
@@ -0,0 +1,2 @@
1
+ Return qualifying integration findings tied to issue/branch identities, then a
2
+ justified merge order. If the batch is coherent, say so briefly.
@@ -0,0 +1,3 @@
1
+ The reviewed artifact is the supplied scoped code input. Report only material
2
+ defects attributable to that input; do not expand it into unrelated redesign or
3
+ cleanup.
@@ -0,0 +1,3 @@
1
+ Output ONLY direct acyclic edges as `<number> -> <number> # reason`, using supplied
2
+ numbers. Omit transitive edges. If none, output exactly `# No dependencies found`.
3
+ No fences, headings, bullets, or other prose.
@@ -0,0 +1,5 @@
1
+ The reviewed artifact is the complete branch diff. Review all material defects
2
+ introduced by that diff, including code outside the feedback-driven correction.
3
+ This full scope supersedes any feedback-focused methodology because no safe
4
+ PR-comment review-cycle baseline was available. Do not expand the reviewed
5
+ branch diff into unrelated redesign or cleanup.
@@ -0,0 +1,3 @@
1
+ The reviewed artifact is the implementation change and its supplied plan context.
2
+ Report only material defects introduced by that change that prevent the
3
+ intended behavior or violate an established public contract or invariant. Do not expand the reviewed change into unrelated redesign or cleanup.
@@ -0,0 +1,4 @@
1
+ The reviewed artifact is the plan. Treat its accepted design, explicit non-goals,
2
+ and stated boundary as intended unless repository evidence demonstrates that it is
3
+ incorrect, unsafe, infeasible, internally inconsistent, or unable to meet a stated
4
+ acceptance criterion. Do not propose a replacement design without that evidence.
@@ -0,0 +1,2 @@
1
+ The reviewed artifact is the feedback-driven correction and its supplied feedback
2
+ context. Verify that the correction resolves the intended verified defect and does not regress directly affected behavior or contracts. Do not re-review untouched implementation or reopen accepted design unless the feedback-driven edit itself demonstrates a material correctness or safety failure.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: code-review
3
+ description: Review a code change for correctness, security, maintainability, tests, and scope alignment.
4
+ ---
5
+
6
+ # Code review methodology
7
+
8
+ Read the complete diff in context and follow changed values through callers,
9
+ models, persistence, and external boundaries. Prioritize concrete correctness
10
+ bugs, security failures, data loss, broken compatibility, concurrency or state
11
+ errors, and missing regression tests where an untested behavior can plausibly
12
+ fail. Anchor each concern to the intended behavior, public contracts, and
13
+ established repository invariants; verify error paths and edge conditions as
14
+ carefully as the happy path.
15
+
16
+ Reference exact files and lines, explain the observable failure, and suggest the
17
+ smallest robust fix. Omit style preferences, alternative abstractions, generic
18
+ maintainability advice, unrelated legacy cleanup, and hypothetical risks without
19
+ a plausible execution path. If no material defect exists, say so briefly.