wade-cli 0.0.2__tar.gz → 0.29.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 (341) hide show
  1. wade_cli-0.29.2/.github/workflows/auto-version.yml +73 -0
  2. {wade_cli-0.0.2 → wade_cli-0.29.2}/.github/workflows/ci.yml +7 -25
  3. wade_cli-0.29.2/.github/workflows/pr-title-lint.yml +31 -0
  4. {wade_cli-0.0.2 → wade_cli-0.29.2}/.gitignore +11 -5
  5. {wade_cli-0.0.2 → wade_cli-0.29.2}/.pre-commit-config.yaml +5 -13
  6. wade_cli-0.29.2/.wade.yml +66 -0
  7. {wade_cli-0.0.2 → wade_cli-0.29.2}/AGENTS.md +10 -48
  8. wade_cli-0.29.2/CHANGELOG.md +724 -0
  9. {wade_cli-0.0.2 → wade_cli-0.29.2}/CONTRIBUTING.md +9 -14
  10. wade_cli-0.29.2/KNOWLEDGE.md +115 -0
  11. wade_cli-0.29.2/KNOWLEDGE.ratings.yml +27 -0
  12. {wade_cli-0.0.2 → wade_cli-0.29.2}/PKG-INFO +113 -16
  13. {wade_cli-0.0.2 → wade_cli-0.29.2}/README.md +109 -14
  14. wade_cli-0.29.2/docker-compose.e2e.yml +25 -0
  15. wade_cli-0.29.2/docs/dev/architecture.md +331 -0
  16. {wade_cli-0.0.2 → wade_cli-0.29.2}/docs/dev/documentation-policies.md +4 -4
  17. {wade_cli-0.0.2 → wade_cli-0.29.2}/docs/dev/extending.md +10 -19
  18. {wade_cli-0.0.2 → wade_cli-0.29.2}/docs/dev/skills-system.md +33 -13
  19. wade_cli-0.29.2/docs/dev/testing.md +244 -0
  20. {wade_cli-0.0.2 → wade_cli-0.29.2}/install.sh +1 -1
  21. {wade_cli-0.0.2 → wade_cli-0.29.2}/pyproject.toml +18 -3
  22. wade_cli-0.29.2/scripts/release.sh +92 -0
  23. wade_cli-0.29.2/scripts/setup-worktree.sh +29 -0
  24. wade_cli-0.29.2/scripts/test-e2e-docker.sh +29 -0
  25. wade_cli-0.29.2/scripts/test-e2e.sh +4 -0
  26. wade_cli-0.29.2/scripts/test-live-ai-taskr.sh +156 -0
  27. wade_cli-0.29.2/scripts/test-live-ai.sh +38 -0
  28. wade_cli-0.29.2/scripts/test-live-gh.sh +42 -0
  29. {wade_cli-0.0.2 → wade_cli-0.29.2}/scripts/test.sh +5 -0
  30. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/__init__.py +1 -1
  31. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/cli/admin.py +20 -28
  32. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/cli/autocomplete.py +18 -2
  33. wade_cli-0.29.2/src/wade/cli/implementation_session.py +148 -0
  34. wade_cli-0.29.2/src/wade/cli/knowledge.py +359 -0
  35. wade_cli-0.29.2/src/wade/cli/main.py +607 -0
  36. wade_cli-0.29.2/src/wade/cli/plan_session.py +55 -0
  37. wade_cli-0.29.2/src/wade/cli/review.py +196 -0
  38. wade_cli-0.29.2/src/wade/cli/review_pr_comments_session.py +120 -0
  39. wade_cli-0.29.2/src/wade/cli/session_shared.py +61 -0
  40. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/cli/task.py +89 -9
  41. wade_cli-0.29.2/src/wade/cli/worktree.py +130 -0
  42. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/config/loader.py +84 -13
  43. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/config/migrations.py +29 -0
  44. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/db/__init__.py +8 -1
  45. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/db/repositories.py +6 -1
  46. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/db/tables.py +1 -1
  47. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/git/__init__.py +10 -0
  48. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/git/pr.py +170 -16
  49. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/git/repo.py +96 -1
  50. wade_cli-0.29.2/src/wade/git/stash.py +158 -0
  51. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/git/sync.py +1 -1
  52. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/git/worktree.py +35 -0
  53. wade_cli-0.29.2/src/wade/hooks/__init__.py +19 -0
  54. wade_cli-0.29.2/src/wade/hooks/plan_write_guard.py +200 -0
  55. wade_cli-0.29.2/src/wade/hooks/worktree_guard.py +186 -0
  56. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/models/__init__.py +14 -3
  57. wade_cli-0.29.2/src/wade/models/batch.py +33 -0
  58. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/models/config.py +98 -15
  59. wade_cli-0.29.2/src/wade/models/delegation.py +42 -0
  60. wade_cli-0.29.2/src/wade/models/review.py +517 -0
  61. wade_cli-0.0.2/src/wade/models/work.py → wade_cli-0.29.2/src/wade/models/session.py +42 -6
  62. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/models/task.py +92 -5
  63. wade_cli-0.29.2/src/wade/providers/__init__.py +39 -0
  64. wade_cli-0.29.2/src/wade/providers/_pr_delegate.py +69 -0
  65. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/providers/base.py +67 -43
  66. wade_cli-0.29.2/src/wade/providers/clickup.py +326 -0
  67. wade_cli-0.29.2/src/wade/providers/github.py +983 -0
  68. wade_cli-0.29.2/src/wade/providers/markdown.py +703 -0
  69. wade_cli-0.29.2/src/wade/providers/registry.py +72 -0
  70. wade_cli-0.29.2/src/wade/services/ai_resolution.py +350 -0
  71. wade_cli-0.29.2/src/wade/services/batch_review_service.py +548 -0
  72. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/services/check_service.py +172 -15
  73. wade_cli-0.29.2/src/wade/services/delegation_service.py +271 -0
  74. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/services/deps_service.py +212 -175
  75. wade_cli-0.29.2/src/wade/services/implementation_service/__init__.py +11 -0
  76. wade_cli-0.29.2/src/wade/services/implementation_service/batch.py +533 -0
  77. wade_cli-0.29.2/src/wade/services/implementation_service/bootstrap.py +539 -0
  78. wade_cli-0.0.2/src/wade/services/work_service.py → wade_cli-0.29.2/src/wade/services/implementation_service/core.py +1213 -641
  79. wade_cli-0.29.2/src/wade/services/implementation_service/usage_tracking.py +336 -0
  80. wade_cli-0.29.2/src/wade/services/init_service.py +2748 -0
  81. wade_cli-0.29.2/src/wade/services/knowledge_search.py +232 -0
  82. wade_cli-0.29.2/src/wade/services/knowledge_service.py +799 -0
  83. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/services/plan_service.py +339 -130
  84. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/services/prompt_delivery.py +1 -1
  85. wade_cli-0.29.2/src/wade/services/review_delegation_service.py +261 -0
  86. wade_cli-0.29.2/src/wade/services/review_service.py +1152 -0
  87. wade_cli-0.29.2/src/wade/services/review_settle.py +81 -0
  88. wade_cli-0.29.2/src/wade/services/smart_start.py +426 -0
  89. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/services/task_service.py +179 -134
  90. wade_cli-0.29.2/src/wade/skills/installer.py +461 -0
  91. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/ui/console.py +13 -6
  92. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/ui/prompts.py +14 -0
  93. wade_cli-0.29.2/src/wade/utils/http.py +96 -0
  94. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/utils/install.py +17 -4
  95. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/utils/process.py +45 -28
  96. wade_cli-0.29.2/src/wade/utils/terminal.py +555 -0
  97. wade_cli-0.29.2/src/wade/utils/token_usage_markdown.py +105 -0
  98. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/utils/update_check.py +3 -3
  99. {wade_cli-0.0.2 → wade_cli-0.29.2}/templates/agents-pointer.md +3 -3
  100. wade_cli-0.29.2/templates/prompts/implement-context.md +19 -0
  101. wade_cli-0.29.2/templates/prompts/plan-session.md +58 -0
  102. wade_cli-0.29.2/templates/prompts/review-batch.md +20 -0
  103. wade_cli-0.29.2/templates/prompts/review-code.md +14 -0
  104. wade_cli-0.29.2/templates/prompts/review-plan.md +14 -0
  105. wade_cli-0.29.2/templates/prompts/review-pr-comments.md +23 -0
  106. wade_cli-0.29.2/templates/setup-worktree.sh.example +41 -0
  107. wade_cli-0.29.2/templates/skills/_partials/review-enforcement-rule.md +8 -0
  108. wade_cli-0.29.2/templates/skills/_partials/review-implementation-closing-step.md +24 -0
  109. wade_cli-0.29.2/templates/skills/_partials/review-plan-step.md +17 -0
  110. wade_cli-0.29.2/templates/skills/_partials/user-interaction.md +5 -0
  111. {wade_cli-0.0.2 → wade_cli-0.29.2}/templates/skills/deps/SKILL.md +1 -1
  112. wade_cli-0.29.2/templates/skills/implementation-session/SKILL.md +341 -0
  113. wade_cli-0.29.2/templates/skills/knowledge/SKILL.md +145 -0
  114. wade_cli-0.29.2/templates/skills/plan-session/SKILL.md +176 -0
  115. wade_cli-0.29.2/templates/skills/review-pr-comments-session/SKILL.md +247 -0
  116. {wade_cli-0.0.2 → wade_cli-0.29.2}/templates/skills/task/SKILL.md +18 -58
  117. {wade_cli-0.0.2 → wade_cli-0.29.2}/templates/skills/task/examples.md +6 -6
  118. {wade_cli-0.0.2 → wade_cli-0.29.2}/templates/skills/task/plan-format.md +7 -7
  119. {wade_cli-0.0.2 → wade_cli-0.29.2}/templates/statusline-command.sh +41 -61
  120. wade_cli-0.29.2/tests/e2e/_support.py +277 -0
  121. wade_cli-0.29.2/tests/e2e/conftest.py +100 -0
  122. wade_cli-0.29.2/tests/e2e/mock_gh_script.py +650 -0
  123. wade_cli-0.29.2/tests/e2e/test_admin_contract.py +67 -0
  124. wade_cli-0.29.2/tests/e2e/test_check_contract.py +122 -0
  125. wade_cli-0.29.2/tests/e2e/test_implement_work_done_contract.py +360 -0
  126. wade_cli-0.29.2/tests/e2e/test_knowledge_contract.py +116 -0
  127. wade_cli-0.29.2/tests/e2e/test_mock_gh_contract.py +52 -0
  128. wade_cli-0.29.2/tests/e2e/test_plan_contract.py +199 -0
  129. wade_cli-0.29.2/tests/e2e/test_review_contract.py +909 -0
  130. wade_cli-0.29.2/tests/e2e/test_smart_start_contract.py +203 -0
  131. wade_cli-0.29.2/tests/e2e/test_task_contract.py +335 -0
  132. wade_cli-0.29.2/tests/e2e/test_work_sync_list_contract.py +221 -0
  133. wade_cli-0.29.2/tests/fixtures/live/taskr_header_hi_body.md +17 -0
  134. wade_cli-0.29.2/tests/fixtures/live/taskr_header_howdy_body.md +17 -0
  135. wade_cli-0.29.2/tests/integration/test_autostash.py +261 -0
  136. wade_cli-0.29.2/tests/integration/test_check.py +80 -0
  137. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/integration/test_git.py +5 -1
  138. wade_cli-0.0.2/tests/integration/test_work_lifecycle.py → wade_cli-0.29.2/tests/integration/test_implementation_lifecycle.py +15 -14
  139. wade_cli-0.29.2/tests/integration/test_init.py +73 -0
  140. wade_cli-0.29.2/tests/integration/test_knowledge.py +276 -0
  141. wade_cli-0.29.2/tests/integration/test_markdown_provider.py +199 -0
  142. wade_cli-0.29.2/tests/integration/test_skill_install.py +352 -0
  143. wade_cli-0.29.2/tests/live/test_wade_live_ai.py +88 -0
  144. wade_cli-0.29.2/tests/live/test_wade_live_ai_taskr.py +502 -0
  145. wade_cli-0.29.2/tests/live/test_wade_live_gh.py +354 -0
  146. wade_cli-0.29.2/tests/test_cli_basics.py +291 -0
  147. wade_cli-0.29.2/tests/unit/conftest.py +20 -0
  148. wade_cli-0.29.2/tests/unit/test_cli/test_done_review_hint.py +189 -0
  149. wade_cli-0.29.2/tests/unit/test_cli/test_knowledge_cli.py +487 -0
  150. wade_cli-0.29.2/tests/unit/test_cli/test_review_cli.py +524 -0
  151. wade_cli-0.29.2/tests/unit/test_cli/test_session_subapps.py +225 -0
  152. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_cli/test_shell_init.py +37 -4
  153. wade_cli-0.29.2/tests/unit/test_cli/test_task_cli.py +66 -0
  154. wade_cli-0.29.2/tests/unit/test_cli/test_work_ai_flags.py +39 -0
  155. wade_cli-0.29.2/tests/unit/test_cli/test_work_cli.py +113 -0
  156. wade_cli-0.29.2/tests/unit/test_config/test_loader.py +333 -0
  157. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_config/test_migrations.py +81 -1
  158. wade_cli-0.29.2/tests/unit/test_console.py +29 -0
  159. wade_cli-0.29.2/tests/unit/test_effort.py +426 -0
  160. wade_cli-0.29.2/tests/unit/test_git/test_detached_worktree.py +125 -0
  161. wade_cli-0.29.2/tests/unit/test_git/test_pr_base.py +84 -0
  162. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_git/test_repo.py +71 -1
  163. wade_cli-0.29.2/tests/unit/test_hooks/test_plan_write_guard.py +276 -0
  164. wade_cli-0.29.2/tests/unit/test_hooks/test_worktree_guard.py +250 -0
  165. wade_cli-0.29.2/tests/unit/test_models/test_batch.py +85 -0
  166. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_models/test_config_models.py +42 -6
  167. wade_cli-0.29.2/tests/unit/test_models/test_delegation.py +90 -0
  168. wade_cli-0.29.2/tests/unit/test_models/test_review.py +927 -0
  169. wade_cli-0.29.2/tests/unit/test_models/test_task_models.py +282 -0
  170. wade_cli-0.29.2/tests/unit/test_providers/__init__.py +0 -0
  171. wade_cli-0.29.2/tests/unit/test_providers/test_clickup.py +542 -0
  172. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_providers/test_github.py +177 -107
  173. wade_cli-0.29.2/tests/unit/test_providers/test_github_pr.py +94 -0
  174. wade_cli-0.29.2/tests/unit/test_providers/test_markdown.py +700 -0
  175. wade_cli-0.29.2/tests/unit/test_services/test_ai_resolution.py +478 -0
  176. wade_cli-0.29.2/tests/unit/test_services/test_batch_review_service.py +1011 -0
  177. wade_cli-0.29.2/tests/unit/test_services/test_bootstrap_allowlist.py +377 -0
  178. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_services/test_bootstrap_hook_timeout.py +21 -14
  179. wade_cli-0.29.2/tests/unit/test_services/test_catchup.py +274 -0
  180. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_services/test_check.py +172 -0
  181. wade_cli-0.29.2/tests/unit/test_services/test_delegation_service.py +312 -0
  182. wade_cli-0.29.2/tests/unit/test_services/test_deps_service.py +513 -0
  183. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_services/test_done_plan_flag.py +48 -31
  184. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_services/test_done_via_direct_cleanup.py +49 -29
  185. wade_cli-0.29.2/tests/unit/test_services/test_implementation_done_sync.py +1554 -0
  186. wade_cli-0.29.2/tests/unit/test_services/test_implementation_service.py +2167 -0
  187. wade_cli-0.29.2/tests/unit/test_services/test_implementation_service_resume.py +43 -0
  188. wade_cli-0.29.2/tests/unit/test_services/test_init.py +2541 -0
  189. wade_cli-0.29.2/tests/unit/test_services/test_knowledge_search.py +153 -0
  190. wade_cli-0.29.2/tests/unit/test_services/test_knowledge_service.py +1386 -0
  191. wade_cli-0.29.2/tests/unit/test_services/test_plan_service.py +903 -0
  192. wade_cli-0.29.2/tests/unit/test_services/test_poll_for_reviews.py +822 -0
  193. wade_cli-0.29.2/tests/unit/test_services/test_post_implementation_lifecycle.py +439 -0
  194. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_services/test_pr_summary_path.py +9 -9
  195. wade_cli-0.29.2/tests/unit/test_services/test_preserve_session_data.py +237 -0
  196. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_services/test_prompt_delivery.py +2 -1
  197. wade_cli-0.29.2/tests/unit/test_services/test_review_delegation_service.py +717 -0
  198. wade_cli-0.29.2/tests/unit/test_services/test_review_service.py +1990 -0
  199. wade_cli-0.29.2/tests/unit/test_services/test_smart_start.py +739 -0
  200. wade_cli-0.29.2/tests/unit/test_services/test_smart_start_resume.py +410 -0
  201. wade_cli-0.29.2/tests/unit/test_services/test_sync_base_branch.py +115 -0
  202. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_services/test_task_service.py +102 -18
  203. wade_cli-0.29.2/tests/unit/test_services/test_tracked_managed_files.py +348 -0
  204. wade_cli-0.29.2/tests/unit/test_services/test_worktree_gitignore.py +247 -0
  205. wade_cli-0.29.2/tests/unit/test_skills/test_managed_gitignore.py +74 -0
  206. wade_cli-0.29.2/tests/unit/test_utils/test_http.py +164 -0
  207. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_utils/test_install.py +59 -9
  208. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_utils/test_process.py +36 -0
  209. wade_cli-0.29.2/tests/unit/test_utils/test_terminal.py +79 -0
  210. wade_cli-0.29.2/tests/unit/test_utils/test_terminal_launch.py +513 -0
  211. wade_cli-0.29.2/tests/unit/test_yolo.py +642 -0
  212. wade_cli-0.0.2/.claude/settings.local.json +0 -37
  213. wade_cli-0.0.2/CHANGELOG.md +0 -9
  214. wade_cli-0.0.2/CLAUDE.md +0 -1
  215. wade_cli-0.0.2/Dockerfile +0 -37
  216. wade_cli-0.0.2/docker-compose.yml +0 -42
  217. wade_cli-0.0.2/docs/dev/architecture.md +0 -303
  218. wade_cli-0.0.2/docs/dev/testing.md +0 -121
  219. wade_cli-0.0.2/scripts/e2e_smoke.sh +0 -216
  220. wade_cli-0.0.2/scripts/probe_models.py +0 -344
  221. wade_cli-0.0.2/scripts/probe_models.sh +0 -3
  222. wade_cli-0.0.2/scripts/setup-release.sh +0 -187
  223. wade_cli-0.0.2/src/wade/ai_tools/__init__.py +0 -16
  224. wade_cli-0.0.2/src/wade/ai_tools/antigravity.py +0 -54
  225. wade_cli-0.0.2/src/wade/ai_tools/base.py +0 -280
  226. wade_cli-0.0.2/src/wade/ai_tools/claude.py +0 -77
  227. wade_cli-0.0.2/src/wade/ai_tools/codex.py +0 -53
  228. wade_cli-0.0.2/src/wade/ai_tools/copilot.py +0 -58
  229. wade_cli-0.0.2/src/wade/ai_tools/gemini.py +0 -45
  230. wade_cli-0.0.2/src/wade/ai_tools/model_utils.py +0 -49
  231. wade_cli-0.0.2/src/wade/ai_tools/opencode.py +0 -70
  232. wade_cli-0.0.2/src/wade/ai_tools/transcript.py +0 -714
  233. wade_cli-0.0.2/src/wade/ai_tools/vscode.py +0 -53
  234. wade_cli-0.0.2/src/wade/cli/main.py +0 -224
  235. wade_cli-0.0.2/src/wade/cli/work.py +0 -244
  236. wade_cli-0.0.2/src/wade/config/claude_allowlist.py +0 -70
  237. wade_cli-0.0.2/src/wade/config/defaults.py +0 -54
  238. wade_cli-0.0.2/src/wade/data/__init__.py +0 -18
  239. wade_cli-0.0.2/src/wade/data/models.json +0 -128
  240. wade_cli-0.0.2/src/wade/models/ai.py +0 -89
  241. wade_cli-0.0.2/src/wade/providers/__init__.py +0 -6
  242. wade_cli-0.0.2/src/wade/providers/github.py +0 -511
  243. wade_cli-0.0.2/src/wade/providers/registry.py +0 -24
  244. wade_cli-0.0.2/src/wade/services/ai_resolution.py +0 -93
  245. wade_cli-0.0.2/src/wade/services/init_service.py +0 -1317
  246. wade_cli-0.0.2/src/wade/skills/installer.py +0 -234
  247. wade_cli-0.0.2/src/wade/utils/terminal.py +0 -281
  248. wade_cli-0.0.2/templates/prompts/deps-interactive.md +0 -2
  249. wade_cli-0.0.2/templates/prompts/plan-session.md +0 -42
  250. wade_cli-0.0.2/templates/prompts/work-context.md +0 -9
  251. wade_cli-0.0.2/templates/skills/plan-session/SKILL.md +0 -106
  252. wade_cli-0.0.2/templates/skills/work-session/SKILL.md +0 -184
  253. wade_cli-0.0.2/tests/e2e/test_live_workflow.py +0 -161
  254. wade_cli-0.0.2/tests/e2e/test_workflow_chain.py +0 -572
  255. wade_cli-0.0.2/tests/integration/test_check.py +0 -45
  256. wade_cli-0.0.2/tests/integration/test_init.py +0 -49
  257. wade_cli-0.0.2/tests/integration/test_skill_install.py +0 -60
  258. wade_cli-0.0.2/tests/live/test_gh_integration.py +0 -60
  259. wade_cli-0.0.2/tests/test_cli_basics.py +0 -112
  260. wade_cli-0.0.2/tests/unit/test_ai_tools/__init__.py +0 -1
  261. wade_cli-0.0.2/tests/unit/test_ai_tools/test_base_registry.py +0 -243
  262. wade_cli-0.0.2/tests/unit/test_ai_tools/test_model_registry.py +0 -58
  263. wade_cli-0.0.2/tests/unit/test_cli/test_work_ai_flags.py +0 -39
  264. wade_cli-0.0.2/tests/unit/test_config/test_claude_allowlist.py +0 -227
  265. wade_cli-0.0.2/tests/unit/test_config/test_loader.py +0 -172
  266. wade_cli-0.0.2/tests/unit/test_models/test_ai_tools.py +0 -289
  267. wade_cli-0.0.2/tests/unit/test_models/test_task_models.py +0 -122
  268. wade_cli-0.0.2/tests/unit/test_providers/test_github_pr.py +0 -58
  269. wade_cli-0.0.2/tests/unit/test_services/test_deps_service.py +0 -368
  270. wade_cli-0.0.2/tests/unit/test_services/test_init.py +0 -821
  271. wade_cli-0.0.2/tests/unit/test_services/test_plan_service.py +0 -472
  272. wade_cli-0.0.2/tests/unit/test_services/test_post_work_lifecycle.py +0 -408
  273. wade_cli-0.0.2/tests/unit/test_services/test_work_done_sync.py +0 -873
  274. wade_cli-0.0.2/tests/unit/test_services/test_work_service.py +0 -759
  275. wade_cli-0.0.2/tests/unit/test_transcript/__init__.py +0 -1
  276. wade_cli-0.0.2/tests/unit/test_transcript/test_parser.py +0 -632
  277. wade_cli-0.0.2/tests/unit/test_utils/test_terminal.py +0 -37
  278. wade_cli-0.0.2/tests/unit/test_utils/test_terminal_launch.py +0 -273
  279. {wade_cli-0.0.2 → wade_cli-0.29.2}/.github/workflows/publish.yml +0 -0
  280. {wade_cli-0.0.2 → wade_cli-0.29.2}/.github/workflows/release.yml +0 -0
  281. {wade_cli-0.0.2 → wade_cli-0.29.2}/assets/wade.png +0 -0
  282. {wade_cli-0.0.2 → wade_cli-0.29.2}/scripts/auto_version.py +0 -0
  283. {wade_cli-0.0.2 → wade_cli-0.29.2}/scripts/changelog.py +0 -0
  284. {wade_cli-0.0.2 → wade_cli-0.29.2}/scripts/check-all.sh +0 -0
  285. {wade_cli-0.0.2 → wade_cli-0.29.2}/scripts/check.sh +0 -0
  286. {wade_cli-0.0.2 → wade_cli-0.29.2}/scripts/fmt.sh +0 -0
  287. {wade_cli-0.0.2 → wade_cli-0.29.2}/scripts/hooks/pre-push +0 -0
  288. {wade_cli-0.0.2 → wade_cli-0.29.2}/scripts/install-hooks.sh +0 -0
  289. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/__main__.py +0 -0
  290. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/cli/__init__.py +0 -0
  291. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/config/__init__.py +0 -0
  292. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/config/schema.py +0 -0
  293. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/db/engine.py +0 -0
  294. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/git/branch.py +0 -0
  295. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/logging/__init__.py +0 -0
  296. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/logging/context.py +0 -0
  297. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/logging/setup.py +0 -0
  298. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/models/deps.py +0 -0
  299. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/models/events.py +0 -0
  300. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/services/__init__.py +0 -0
  301. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/skills/__init__.py +0 -0
  302. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/skills/pointer.py +0 -0
  303. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/ui/__init__.py +0 -0
  304. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/utils/__init__.py +0 -0
  305. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/utils/clipboard.py +0 -0
  306. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/utils/markdown.py +0 -0
  307. {wade_cli-0.0.2 → wade_cli-0.29.2}/src/wade/utils/slug.py +0 -0
  308. {wade_cli-0.0.2 → wade_cli-0.29.2}/templates/prompts/deps-analysis.md +0 -0
  309. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/__init__.py +0 -0
  310. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/conftest.py +0 -0
  311. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/e2e/__init__.py +0 -0
  312. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/fixtures/transcripts/claude_session.txt +0 -0
  313. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/fixtures/transcripts/codex_session.txt +0 -0
  314. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  315. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/fixtures/transcripts/gemini_session.txt +0 -0
  316. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/fixtures/transcripts/generic_session.txt +0 -0
  317. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/integration/__init__.py +0 -0
  318. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/live/__init__.py +0 -0
  319. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/__init__.py +0 -0
  320. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_cli/__init__.py +0 -0
  321. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_config/__init__.py +0 -0
  322. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  323. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_db/__init__.py +0 -0
  324. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_db/test_repository_transactions.py +0 -0
  325. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_git/__init__.py +0 -0
  326. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_git/test_branch_slugify.py +0 -0
  327. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  328. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  329. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_git/test_worktree_remove.py +0 -0
  330. {wade_cli-0.0.2/tests/unit/test_providers → wade_cli-0.29.2/tests/unit/test_hooks}/__init__.py +0 -0
  331. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_models/__init__.py +0 -0
  332. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_models/test_db.py +0 -0
  333. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_models/test_deps_models.py +0 -0
  334. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_models/test_deps_partition.py +0 -0
  335. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_services/__init__.py +0 -0
  336. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  337. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_utils/__init__.py +0 -0
  338. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_utils/test_markdown.py +0 -0
  339. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_utils/test_prompts.py +0 -0
  340. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_utils/test_slug.py +0 -0
  341. {wade_cli-0.0.2 → wade_cli-0.29.2}/tests/unit/test_utils/test_update_check.py +0 -0
@@ -0,0 +1,73 @@
1
+ name: Auto Version Bump
2
+
3
+ on:
4
+ pull_request:
5
+ types: [closed]
6
+ branches: [main]
7
+
8
+ permissions:
9
+ contents: write
10
+
11
+ jobs:
12
+ version-bump:
13
+ # Only run when the PR was actually merged
14
+ if: github.event.pull_request.merged == true
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Detect bump type
18
+ id: detect
19
+ env:
20
+ COMMIT_MSG: ${{ github.event.pull_request.title }}
21
+ run: |
22
+ MSG="$COMMIT_MSG"
23
+ FIRST_LINE=$(echo "$MSG" | head -n 1)
24
+
25
+ if echo "$MSG" | grep -q 'BREAKING CHANGE'; then
26
+ echo "bump=major" >> "$GITHUB_OUTPUT"
27
+ elif echo "$FIRST_LINE" | grep -qE '^[a-z]+(\(.+\))?!:'; then
28
+ echo "bump=major" >> "$GITHUB_OUTPUT"
29
+ elif echo "$FIRST_LINE" | grep -qE '^(feat|update)(\(.+\))?:'; then
30
+ echo "bump=minor" >> "$GITHUB_OUTPUT"
31
+ elif echo "$FIRST_LINE" | grep -qE '^(fix|docs|refactor|chore|style|perf|test|ci|build|revert)(\(.+\))?:'; then
32
+ echo "bump=patch" >> "$GITHUB_OUTPUT"
33
+ else
34
+ echo "bump=" >> "$GITHUB_OUTPUT"
35
+ fi
36
+
37
+ - name: Skip if no conventional commit
38
+ if: steps.detect.outputs.bump == ''
39
+ run: echo "No conventional commit prefix detected — skipping version bump."
40
+
41
+ - uses: actions/checkout@v4
42
+ if: steps.detect.outputs.bump != ''
43
+ with:
44
+ fetch-depth: 0
45
+
46
+ - uses: astral-sh/setup-uv@v3
47
+ if: steps.detect.outputs.bump != ''
48
+ with:
49
+ version: "latest"
50
+
51
+ - name: Set up Python
52
+ if: steps.detect.outputs.bump != ''
53
+ run: uv python install 3.13
54
+
55
+ - name: Install dependencies
56
+ if: steps.detect.outputs.bump != ''
57
+ run: uv sync --all-extras
58
+
59
+ - name: Configure git
60
+ if: steps.detect.outputs.bump != ''
61
+ run: |
62
+ git config user.name "github-actions[bot]"
63
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
64
+
65
+ - name: Bump version
66
+ if: steps.detect.outputs.bump != ''
67
+ run: uv run python scripts/auto_version.py ${{ steps.detect.outputs.bump }}
68
+
69
+ - name: Push commit and tag
70
+ if: steps.detect.outputs.bump != ''
71
+ run: |
72
+ git push
73
+ git push --tags
@@ -57,33 +57,15 @@ jobs:
57
57
  git config --global user.name "wade test"
58
58
  git config --global init.defaultBranch main
59
59
  - name: Run unit tests
60
- run: uv run pytest tests/unit/ -v --tb=short
60
+ run: ./scripts/test.sh tests/unit/
61
61
  - name: Run integration tests
62
- run: uv run pytest tests/integration/ -v --tb=short
62
+ run: ./scripts/test.sh tests/integration/
63
+ - name: Run top-level CLI contract smoke
64
+ run: ./scripts/test.sh tests/test_cli_basics.py
63
65
 
64
- test-live:
65
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
66
+ e2e_docker:
66
67
  runs-on: ubuntu-latest
67
- needs: [test]
68
- env:
69
- RUN_LIVE_GH_TESTS: "1"
70
- GH_TOKEN: ${{ secrets.GH_TOKEN }}
71
68
  steps:
72
69
  - uses: actions/checkout@v4
73
- - uses: astral-sh/setup-uv@v3
74
- with:
75
- version: "latest"
76
- - name: Set up Python
77
- run: uv python install 3.13
78
- - name: Install dependencies
79
- run: uv sync --all-extras
80
- - name: Install gh CLI
81
- run: |
82
- type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
83
- curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
84
- sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
85
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
86
- sudo apt update && sudo apt install gh -y
87
- - name: Run live tests
88
- if: env.GH_TOKEN != ''
89
- run: uv run pytest tests/live/ -v --tb=short
70
+ - name: Run deterministic e2e contract tests in Docker
71
+ run: ./scripts/test-e2e-docker.sh
@@ -0,0 +1,31 @@
1
+ name: PR Title Lint
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, edited, synchronize, reopened]
6
+ branches: [main]
7
+
8
+ permissions:
9
+ pull-requests: read
10
+
11
+ jobs:
12
+ lint-title:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: amannn/action-semantic-pull-request@v5
16
+ env:
17
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
18
+ with:
19
+ types: |
20
+ feat
21
+ fix
22
+ docs
23
+ refactor
24
+ chore
25
+ style
26
+ perf
27
+ test
28
+ ci
29
+ build
30
+ revert
31
+ update
@@ -25,8 +25,17 @@ env/
25
25
  htmlcov/
26
26
  .mypy_cache/
27
27
 
28
- # wade runtime (per-project, gitignored)
29
- .wade/
28
+ # AI tool directories (wade-managed — never committed in this repo)
29
+ .agents/
30
+ .claude/
31
+ .copilot/
32
+ .cursor/
33
+ .gemini/
34
+ .github/hooks/
35
+ .github/skills
36
+ CLAUDE.md
37
+ PLAN.md
38
+ PR-SUMMARY.md
30
39
 
31
40
  # OS
32
41
  .DS_Store
@@ -35,8 +44,5 @@ Thumbs.db
35
44
  # uv
36
45
  uv.lock
37
46
 
38
- # Temporary commit message file (agents use this to avoid rewriting on hook retries)
39
- .commit-msg
40
-
41
47
  # Local archive (pre-reset export)
42
48
  archive/
@@ -6,22 +6,14 @@ repos:
6
6
  args: [--fix]
7
7
  - id: ruff-format
8
8
 
9
- - repo: https://github.com/pre-commit/mirrors-mypy
10
- rev: v1.15.0
9
+ - repo: local
11
10
  hooks:
12
11
  - id: mypy
13
- args: [--strict]
14
- additional_dependencies:
15
- - typer>=0.12
16
- - pydantic>=2.0
17
- - pydantic-settings>=2.0
18
- - sqlmodel>=0.0.16
19
- - pyyaml>=6.0
20
- - rich>=13.0
21
- - structlog>=24.0
22
- - types-PyYAML>=6.0
12
+ name: mypy
13
+ language: system
14
+ entry: uv run mypy --strict src/
23
15
  pass_filenames: false
24
- entry: mypy src/
16
+ always_run: true
25
17
 
26
18
  - repo: https://github.com/pre-commit/pre-commit-hooks
27
19
  rev: v5.0.0
@@ -0,0 +1,66 @@
1
+ version: 2
2
+ project:
3
+ main_branch: main
4
+ issue_label: feature-plan
5
+ worktrees_dir: ../.worktrees
6
+ branch_prefix: feat
7
+ merge_strategy: PR
8
+ ai:
9
+ default_tool: claude
10
+ default_model: claude-sonnet-4.6
11
+ effort: max
12
+ plan:
13
+ tool: claude
14
+ model: claude-opus-4.7
15
+ effort: xhigh
16
+ yolo: true
17
+ deps:
18
+ tool: copilot
19
+ model: claude-sonnet-4.6
20
+ mode: headless
21
+ yolo: false
22
+ review_plan:
23
+ tool: copilot
24
+ model: claude-sonnet-4.6
25
+ mode: headless
26
+ enabled: true
27
+ yolo: false
28
+ review_implementation:
29
+ tool: copilot
30
+ model: claude-sonnet-4.6
31
+ mode: headless
32
+ enabled: true
33
+ yolo: false
34
+ review_batch:
35
+ tool: copilot
36
+ model: claude-sonnet-4.6
37
+ mode: interactive
38
+ enabled: true
39
+ yolo: true
40
+ yolo: true
41
+ models:
42
+ claude:
43
+ easy:
44
+ model: claude-sonnet-4.6
45
+ effort: xhigh
46
+ medium:
47
+ model: claude-sonnet-4.6
48
+ effort: max
49
+ complex:
50
+ model: claude-opus-4.7
51
+ effort: high
52
+ very_complex:
53
+ model: claude-opus-4.7
54
+ effort: xhigh
55
+ provider:
56
+ name: github
57
+ knowledge:
58
+ enabled: true
59
+ path: KNOWLEDGE.md
60
+ hooks:
61
+ post_worktree_create: scripts/setup-worktree.sh
62
+ copy_to_worktree:
63
+ - .env
64
+ - .wade.yml
65
+ - KNOWLEDGE.md
66
+ - KNOWLEDGE.ratings.yml
@@ -31,6 +31,8 @@ Two distinct worlds interact in this codebase. Always be clear which one you are
31
31
  |--------|---------|
32
32
  | `./scripts/test.sh` | Run all tests (excludes live) |
33
33
  | `./scripts/test.sh tests/unit/` | Unit tests only |
34
+ | `./scripts/test-e2e.sh` | Deterministic E2E contract tests (host lane) |
35
+ | `./scripts/test-e2e-docker.sh` | Deterministic E2E contract tests in Docker (CI-equivalent) |
34
36
  | `./scripts/check.sh` | Lint + type-check (both) |
35
37
  | `./scripts/check.sh --lint` | Lint + format check only |
36
38
  | `./scripts/check.sh --types` | Type check (strict mypy) only |
@@ -39,7 +41,7 @@ Two distinct worlds interact in this codebase. Always be clear which one you are
39
41
 
40
42
  ```bash
41
43
  uv pip install -e ".[dev]" # Install for development
42
- python scripts/auto_version.py patch # Version bump (patch/minor/major)
44
+ uv run python scripts/auto_version.py patch # Version bump (patch/minor/major)
43
45
 
44
46
  # Version bumps MUST be done with the script above. NEVER bump pyproject.toml
45
47
  # manually, as the script generates CHANGELOG.md and git tags automatically.
@@ -51,9 +53,8 @@ python scripts/auto_version.py patch # Version bump (patch/minor/major)
51
53
 
52
54
  ```
53
55
  CLI Layer -> can import: services, models, config, logging, ui
54
- Service Layer -> can import: providers, ai_tools, git, db, models, config, logging
56
+ Service Layer -> can import: providers, crossby (AI tool adapters), git, db, models, config, logging
55
57
  Provider Layer -> can import: models, config, logging (NO service imports)
56
- AI Tool Layer -> can import: models, config, logging (NO service imports)
57
58
  Git Layer -> can import: models, config, logging (NO service imports)
58
59
  DB Layer -> can import: models, logging (NO config imports)
59
60
  Models Layer -> can import: nothing (leaf dependency)
@@ -61,14 +62,16 @@ Models Layer -> can import: nothing (leaf dependency)
61
62
 
62
63
  No circular dependencies. Models are pure data. Services orchestrate. **Never import a higher layer from a lower layer.**
63
64
 
65
+ AI tool adapters are not part of this repo — they live in the external [`crossby`](https://github.com/ivanviragine/crossby) package (`pyproject.toml`). See `docs/dev/architecture.md` for what moved there.
66
+
64
67
  CLI modules are thin dispatch — they parse flags via Typer, then call service methods. Business logic lives in `services/`, not in `cli/`.
65
68
 
66
69
  > Full package structure, command dispatch, config system, and subsystem details: see `docs/dev/architecture.md`
67
70
 
68
71
  ### Key Design Patterns
69
72
 
70
- - **AI Tool Self-Registration**: `AbstractAITool.__init_subclass__` auto-registers adapters. Adding a new AI tool = one file, one class.
71
- - **Provider Abstraction**: `AbstractTaskProvider` ABC with pluggable backends (currently GitHub via `gh` CLI).
73
+ - **AI Tool Adapters via crossby**: `AbstractAITool` and every tool-specific adapter (Claude, Cursor, Copilot, Gemini, Codex, OpenCode, Antigravity, VS Code) live in the external `crossby` dependency, not this repo. Wade's services import `crossby.ai_tools` and `crossby.models.ai` directly. Adding a new AI tool means contributing to crossby, not wade.
74
+ - **Provider Abstraction**: `AbstractTaskProvider` ABC with pluggable backends (GitHub via `gh` CLI, ClickUp via REST API, Markdown via a single central file). Non-GitHub providers compose `GitHubPRDelegateMixin` so PR-review APIs still flow through `gh`.
72
75
  - **Prompts as .md Templates**: All AI prompts live in `templates/prompts/`, not inline strings.
73
76
  - **Synchronous Only**: No asyncio. Process-level parallelism via multiple terminals.
74
77
  - **Pydantic Everywhere**: All data structures are Pydantic `BaseModel` subclasses, not dicts.
@@ -108,7 +111,7 @@ When developing WADE, **only touch the left column**. Always edit `templates/ski
108
111
  - **Functions**: `snake_case` — `_` prefix for private helpers
109
112
  - **Constants**: `UPPER_SNAKE_CASE`
110
113
  - **Enums**: `StrEnum` for string-valued enums
111
- - **CLI commands**: top-level commands (`wade plan-task`, `wade implement-task`)
114
+ - **CLI commands**: top-level commands (`wade plan`, `wade implement`)
112
115
 
113
116
  ### Commits
114
117
 
@@ -116,33 +119,6 @@ Use [Conventional Commits](https://www.conventionalcommits.org/):
116
119
  `feat:` (minor), `fix:` (patch), `docs:` (patch), `refactor:` (patch),
117
120
  `test:` (patch), `chore:` (patch). Breaking changes (`feat!:`) -> major.
118
121
 
119
- **Before every commit — mandatory sequence (Python changes only):**
120
-
121
- > Skip this if your commit touches only non-Python files (e.g. `.md`, `.gitignore`, `templates/`).
122
-
123
- ```bash
124
- ./scripts/fmt.sh # auto-fix formatting in-place
125
- ./scripts/check.sh --lint # verify lint passes — fix any remaining errors before proceeding
126
- ```
127
-
128
- **Commit using a message file** (handles pre-commit hook retries without rewriting the message):
129
-
130
- ```bash
131
- # Write message once
132
- cat > .commit-msg << 'EOF'
133
- feat: your message here
134
- EOF
135
-
136
- git add <files>
137
- git commit -F .commit-msg
138
-
139
- # If hooks auto-modified files, just re-add and retry — same file:
140
- git add <auto-modified-files>
141
- git commit -F .commit-msg
142
- ```
143
-
144
- `.commit-msg` is gitignored — never committed.
145
-
146
122
  ## Change Checklist
147
123
 
148
124
  Before considering any work complete:
@@ -151,7 +127,7 @@ Before considering any work complete:
151
127
  - [ ] **Types + Lint** — `./scripts/check.sh` passes (or run both at once: `./scripts/check-all.sh`)
152
128
  - [ ] **`AGENTS.md`** — updated if architecture, conventions, or workflow changed
153
129
  - [ ] **`README.md`** — updated if user-facing behavior changed
154
- - [ ] **`templates/skills/`** — updated if agent-facing rules changed (plan-session for planning, work-session for implementation)
130
+ - [ ] **`templates/skills/`** — updated if agent-facing rules changed (plan-session for planning, implementation-session for implementation, review-pr-comments-session for reviews)
155
131
  - [ ] **Commit** — uses conventional-commit prefix
156
132
 
157
133
  > Full 10-item checklist, documentation rules, feedback loop, and correction-driven docs: see `docs/dev/documentation-policies.md`
@@ -167,17 +143,3 @@ Read these on-demand when working in a specific area:
167
143
  | Writing or running tests | `docs/dev/testing.md` |
168
144
  | Working on skills, pointer system, or `wade init` | `docs/dev/skills-system.md` |
169
145
  | Updating documentation policies | `docs/dev/documentation-policies.md` |
170
-
171
- <!-- wade:pointer:start -->
172
- ## Git Workflow
173
-
174
- **First action every session** — read the skill referenced in your clipboard
175
- prompt for full session rules.
176
-
177
- Critical rules you must always follow:
178
-
179
- 1. Never create GitHub Issues via `gh issue create` — use `wade new-task`
180
- or read @.claude/skills/task/SKILL.md
181
- 2. Never create PRs manually (`gh pr create`) or push branches directly — use
182
- `wade work done`
183
- <!-- wade:pointer:end -->