wade-cli 0.0.2__tar.gz → 0.29.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 (340) hide show
  1. wade_cli-0.29.0/.github/workflows/auto-version.yml +73 -0
  2. {wade_cli-0.0.2 → wade_cli-0.29.0}/.github/workflows/ci.yml +7 -25
  3. wade_cli-0.29.0/.github/workflows/pr-title-lint.yml +31 -0
  4. {wade_cli-0.0.2 → wade_cli-0.29.0}/.gitignore +11 -5
  5. {wade_cli-0.0.2 → wade_cli-0.29.0}/.pre-commit-config.yaml +5 -13
  6. wade_cli-0.29.0/.wade.yml +66 -0
  7. {wade_cli-0.0.2 → wade_cli-0.29.0}/AGENTS.md +6 -45
  8. wade_cli-0.29.0/CHANGELOG.md +712 -0
  9. {wade_cli-0.0.2 → wade_cli-0.29.0}/CONTRIBUTING.md +7 -13
  10. wade_cli-0.29.0/KNOWLEDGE.md +115 -0
  11. wade_cli-0.29.0/KNOWLEDGE.ratings.yml +27 -0
  12. {wade_cli-0.0.2 → wade_cli-0.29.0}/PKG-INFO +111 -16
  13. {wade_cli-0.0.2 → wade_cli-0.29.0}/README.md +107 -14
  14. wade_cli-0.29.0/docker-compose.e2e.yml +25 -0
  15. {wade_cli-0.0.2 → wade_cli-0.29.0}/docs/dev/architecture.md +79 -43
  16. {wade_cli-0.0.2 → wade_cli-0.29.0}/docs/dev/documentation-policies.md +4 -4
  17. {wade_cli-0.0.2 → wade_cli-0.29.0}/docs/dev/extending.md +11 -11
  18. {wade_cli-0.0.2 → wade_cli-0.29.0}/docs/dev/skills-system.md +33 -13
  19. wade_cli-0.29.0/docs/dev/testing.md +246 -0
  20. {wade_cli-0.0.2 → wade_cli-0.29.0}/install.sh +1 -1
  21. {wade_cli-0.0.2 → wade_cli-0.29.0}/pyproject.toml +18 -3
  22. wade_cli-0.29.0/scripts/release.sh +92 -0
  23. wade_cli-0.29.0/scripts/setup-worktree.sh +29 -0
  24. wade_cli-0.29.0/scripts/test-e2e-docker.sh +29 -0
  25. wade_cli-0.29.0/scripts/test-e2e.sh +4 -0
  26. wade_cli-0.29.0/scripts/test-live-ai-taskr.sh +156 -0
  27. wade_cli-0.29.0/scripts/test-live-ai.sh +38 -0
  28. wade_cli-0.29.0/scripts/test-live-gh.sh +42 -0
  29. {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/test.sh +5 -0
  30. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/__init__.py +1 -1
  31. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/cli/admin.py +20 -28
  32. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/cli/autocomplete.py +18 -2
  33. wade_cli-0.29.0/src/wade/cli/implementation_session.py +148 -0
  34. wade_cli-0.29.0/src/wade/cli/knowledge.py +359 -0
  35. wade_cli-0.29.0/src/wade/cli/main.py +607 -0
  36. wade_cli-0.29.0/src/wade/cli/plan_session.py +55 -0
  37. wade_cli-0.29.0/src/wade/cli/review.py +196 -0
  38. wade_cli-0.29.0/src/wade/cli/review_pr_comments_session.py +120 -0
  39. wade_cli-0.29.0/src/wade/cli/session_shared.py +61 -0
  40. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/cli/task.py +89 -9
  41. wade_cli-0.29.0/src/wade/cli/worktree.py +130 -0
  42. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/config/loader.py +84 -13
  43. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/config/migrations.py +29 -0
  44. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/db/__init__.py +8 -1
  45. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/db/repositories.py +6 -1
  46. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/db/tables.py +1 -1
  47. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/__init__.py +10 -0
  48. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/pr.py +170 -16
  49. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/repo.py +96 -1
  50. wade_cli-0.29.0/src/wade/git/stash.py +158 -0
  51. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/sync.py +1 -1
  52. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/worktree.py +35 -0
  53. wade_cli-0.29.0/src/wade/hooks/__init__.py +19 -0
  54. wade_cli-0.29.0/src/wade/hooks/plan_write_guard.py +200 -0
  55. wade_cli-0.29.0/src/wade/hooks/worktree_guard.py +186 -0
  56. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/models/__init__.py +14 -3
  57. wade_cli-0.29.0/src/wade/models/batch.py +33 -0
  58. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/models/config.py +98 -15
  59. wade_cli-0.29.0/src/wade/models/delegation.py +42 -0
  60. wade_cli-0.29.0/src/wade/models/review.py +517 -0
  61. wade_cli-0.0.2/src/wade/models/work.py → wade_cli-0.29.0/src/wade/models/session.py +42 -6
  62. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/models/task.py +92 -5
  63. wade_cli-0.29.0/src/wade/providers/__init__.py +39 -0
  64. wade_cli-0.29.0/src/wade/providers/_pr_delegate.py +69 -0
  65. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/providers/base.py +67 -43
  66. wade_cli-0.29.0/src/wade/providers/clickup.py +326 -0
  67. wade_cli-0.29.0/src/wade/providers/github.py +983 -0
  68. wade_cli-0.29.0/src/wade/providers/markdown.py +703 -0
  69. wade_cli-0.29.0/src/wade/providers/registry.py +72 -0
  70. wade_cli-0.29.0/src/wade/services/ai_resolution.py +350 -0
  71. wade_cli-0.29.0/src/wade/services/batch_review_service.py +548 -0
  72. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/check_service.py +172 -15
  73. wade_cli-0.29.0/src/wade/services/delegation_service.py +271 -0
  74. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/deps_service.py +212 -175
  75. wade_cli-0.29.0/src/wade/services/implementation_service/__init__.py +11 -0
  76. wade_cli-0.29.0/src/wade/services/implementation_service/batch.py +533 -0
  77. wade_cli-0.29.0/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.0/src/wade/services/implementation_service/core.py +1213 -641
  79. wade_cli-0.29.0/src/wade/services/implementation_service/usage_tracking.py +336 -0
  80. wade_cli-0.29.0/src/wade/services/init_service.py +2748 -0
  81. wade_cli-0.29.0/src/wade/services/knowledge_search.py +232 -0
  82. wade_cli-0.29.0/src/wade/services/knowledge_service.py +799 -0
  83. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/plan_service.py +339 -130
  84. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/prompt_delivery.py +1 -1
  85. wade_cli-0.29.0/src/wade/services/review_delegation_service.py +261 -0
  86. wade_cli-0.29.0/src/wade/services/review_service.py +1152 -0
  87. wade_cli-0.29.0/src/wade/services/review_settle.py +81 -0
  88. wade_cli-0.29.0/src/wade/services/smart_start.py +426 -0
  89. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/task_service.py +179 -134
  90. wade_cli-0.29.0/src/wade/skills/installer.py +461 -0
  91. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/ui/console.py +13 -6
  92. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/ui/prompts.py +14 -0
  93. wade_cli-0.29.0/src/wade/utils/http.py +96 -0
  94. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/install.py +17 -4
  95. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/process.py +45 -28
  96. wade_cli-0.29.0/src/wade/utils/terminal.py +555 -0
  97. wade_cli-0.29.0/src/wade/utils/token_usage_markdown.py +105 -0
  98. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/update_check.py +3 -3
  99. {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/agents-pointer.md +3 -3
  100. wade_cli-0.29.0/templates/prompts/implement-context.md +19 -0
  101. wade_cli-0.29.0/templates/prompts/plan-session.md +58 -0
  102. wade_cli-0.29.0/templates/prompts/review-batch.md +20 -0
  103. wade_cli-0.29.0/templates/prompts/review-code.md +14 -0
  104. wade_cli-0.29.0/templates/prompts/review-plan.md +14 -0
  105. wade_cli-0.29.0/templates/prompts/review-pr-comments.md +23 -0
  106. wade_cli-0.29.0/templates/setup-worktree.sh.example +41 -0
  107. wade_cli-0.29.0/templates/skills/_partials/review-enforcement-rule.md +8 -0
  108. wade_cli-0.29.0/templates/skills/_partials/review-implementation-closing-step.md +24 -0
  109. wade_cli-0.29.0/templates/skills/_partials/review-plan-step.md +17 -0
  110. wade_cli-0.29.0/templates/skills/_partials/user-interaction.md +5 -0
  111. {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/skills/deps/SKILL.md +1 -1
  112. wade_cli-0.29.0/templates/skills/implementation-session/SKILL.md +341 -0
  113. wade_cli-0.29.0/templates/skills/knowledge/SKILL.md +145 -0
  114. wade_cli-0.29.0/templates/skills/plan-session/SKILL.md +176 -0
  115. wade_cli-0.29.0/templates/skills/review-pr-comments-session/SKILL.md +247 -0
  116. {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/skills/task/SKILL.md +18 -58
  117. {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/skills/task/examples.md +6 -6
  118. {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/skills/task/plan-format.md +7 -7
  119. {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/statusline-command.sh +41 -61
  120. wade_cli-0.29.0/tests/e2e/_support.py +277 -0
  121. wade_cli-0.29.0/tests/e2e/conftest.py +100 -0
  122. wade_cli-0.29.0/tests/e2e/mock_gh_script.py +650 -0
  123. wade_cli-0.29.0/tests/e2e/test_admin_contract.py +67 -0
  124. wade_cli-0.29.0/tests/e2e/test_check_contract.py +122 -0
  125. wade_cli-0.29.0/tests/e2e/test_implement_work_done_contract.py +360 -0
  126. wade_cli-0.29.0/tests/e2e/test_knowledge_contract.py +116 -0
  127. wade_cli-0.29.0/tests/e2e/test_mock_gh_contract.py +52 -0
  128. wade_cli-0.29.0/tests/e2e/test_plan_contract.py +199 -0
  129. wade_cli-0.29.0/tests/e2e/test_review_contract.py +909 -0
  130. wade_cli-0.29.0/tests/e2e/test_smart_start_contract.py +203 -0
  131. wade_cli-0.29.0/tests/e2e/test_task_contract.py +335 -0
  132. wade_cli-0.29.0/tests/e2e/test_work_sync_list_contract.py +221 -0
  133. wade_cli-0.29.0/tests/fixtures/live/taskr_header_hi_body.md +17 -0
  134. wade_cli-0.29.0/tests/fixtures/live/taskr_header_howdy_body.md +17 -0
  135. wade_cli-0.29.0/tests/integration/test_autostash.py +261 -0
  136. wade_cli-0.29.0/tests/integration/test_check.py +80 -0
  137. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/integration/test_git.py +5 -1
  138. wade_cli-0.0.2/tests/integration/test_work_lifecycle.py → wade_cli-0.29.0/tests/integration/test_implementation_lifecycle.py +15 -14
  139. wade_cli-0.29.0/tests/integration/test_init.py +73 -0
  140. wade_cli-0.29.0/tests/integration/test_knowledge.py +276 -0
  141. wade_cli-0.29.0/tests/integration/test_markdown_provider.py +199 -0
  142. wade_cli-0.29.0/tests/integration/test_skill_install.py +352 -0
  143. wade_cli-0.29.0/tests/live/test_wade_live_ai.py +88 -0
  144. wade_cli-0.29.0/tests/live/test_wade_live_ai_taskr.py +502 -0
  145. wade_cli-0.29.0/tests/live/test_wade_live_gh.py +354 -0
  146. wade_cli-0.29.0/tests/test_cli_basics.py +291 -0
  147. wade_cli-0.29.0/tests/unit/conftest.py +20 -0
  148. wade_cli-0.29.0/tests/unit/test_cli/test_done_review_hint.py +189 -0
  149. wade_cli-0.29.0/tests/unit/test_cli/test_knowledge_cli.py +487 -0
  150. wade_cli-0.29.0/tests/unit/test_cli/test_review_cli.py +524 -0
  151. wade_cli-0.29.0/tests/unit/test_cli/test_session_subapps.py +225 -0
  152. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_cli/test_shell_init.py +37 -4
  153. wade_cli-0.29.0/tests/unit/test_cli/test_task_cli.py +66 -0
  154. wade_cli-0.29.0/tests/unit/test_cli/test_work_ai_flags.py +39 -0
  155. wade_cli-0.29.0/tests/unit/test_cli/test_work_cli.py +113 -0
  156. wade_cli-0.29.0/tests/unit/test_config/test_loader.py +333 -0
  157. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_config/test_migrations.py +81 -1
  158. wade_cli-0.29.0/tests/unit/test_console.py +29 -0
  159. wade_cli-0.29.0/tests/unit/test_effort.py +426 -0
  160. wade_cli-0.29.0/tests/unit/test_git/test_detached_worktree.py +125 -0
  161. wade_cli-0.29.0/tests/unit/test_git/test_pr_base.py +84 -0
  162. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/test_repo.py +71 -1
  163. wade_cli-0.29.0/tests/unit/test_hooks/test_plan_write_guard.py +276 -0
  164. wade_cli-0.29.0/tests/unit/test_hooks/test_worktree_guard.py +250 -0
  165. wade_cli-0.29.0/tests/unit/test_models/test_batch.py +85 -0
  166. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_models/test_config_models.py +42 -6
  167. wade_cli-0.29.0/tests/unit/test_models/test_delegation.py +90 -0
  168. wade_cli-0.29.0/tests/unit/test_models/test_review.py +927 -0
  169. wade_cli-0.29.0/tests/unit/test_models/test_task_models.py +282 -0
  170. wade_cli-0.29.0/tests/unit/test_providers/__init__.py +0 -0
  171. wade_cli-0.29.0/tests/unit/test_providers/test_clickup.py +542 -0
  172. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_providers/test_github.py +177 -107
  173. wade_cli-0.29.0/tests/unit/test_providers/test_github_pr.py +94 -0
  174. wade_cli-0.29.0/tests/unit/test_providers/test_markdown.py +700 -0
  175. wade_cli-0.29.0/tests/unit/test_services/test_ai_resolution.py +478 -0
  176. wade_cli-0.29.0/tests/unit/test_services/test_batch_review_service.py +1011 -0
  177. wade_cli-0.29.0/tests/unit/test_services/test_bootstrap_allowlist.py +377 -0
  178. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_bootstrap_hook_timeout.py +21 -14
  179. wade_cli-0.29.0/tests/unit/test_services/test_catchup.py +274 -0
  180. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_check.py +172 -0
  181. wade_cli-0.29.0/tests/unit/test_services/test_delegation_service.py +312 -0
  182. wade_cli-0.29.0/tests/unit/test_services/test_deps_service.py +513 -0
  183. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_done_plan_flag.py +48 -31
  184. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_done_via_direct_cleanup.py +49 -29
  185. wade_cli-0.29.0/tests/unit/test_services/test_implementation_done_sync.py +1554 -0
  186. wade_cli-0.29.0/tests/unit/test_services/test_implementation_service.py +2167 -0
  187. wade_cli-0.29.0/tests/unit/test_services/test_implementation_service_resume.py +43 -0
  188. wade_cli-0.29.0/tests/unit/test_services/test_init.py +2541 -0
  189. wade_cli-0.29.0/tests/unit/test_services/test_knowledge_search.py +153 -0
  190. wade_cli-0.29.0/tests/unit/test_services/test_knowledge_service.py +1386 -0
  191. wade_cli-0.29.0/tests/unit/test_services/test_plan_service.py +903 -0
  192. wade_cli-0.29.0/tests/unit/test_services/test_poll_for_reviews.py +822 -0
  193. wade_cli-0.29.0/tests/unit/test_services/test_post_implementation_lifecycle.py +439 -0
  194. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_pr_summary_path.py +9 -9
  195. wade_cli-0.29.0/tests/unit/test_services/test_preserve_session_data.py +237 -0
  196. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_prompt_delivery.py +2 -1
  197. wade_cli-0.29.0/tests/unit/test_services/test_review_delegation_service.py +717 -0
  198. wade_cli-0.29.0/tests/unit/test_services/test_review_service.py +1990 -0
  199. wade_cli-0.29.0/tests/unit/test_services/test_smart_start.py +739 -0
  200. wade_cli-0.29.0/tests/unit/test_services/test_smart_start_resume.py +410 -0
  201. wade_cli-0.29.0/tests/unit/test_services/test_sync_base_branch.py +115 -0
  202. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_task_service.py +102 -18
  203. wade_cli-0.29.0/tests/unit/test_services/test_tracked_managed_files.py +348 -0
  204. wade_cli-0.29.0/tests/unit/test_services/test_worktree_gitignore.py +247 -0
  205. wade_cli-0.29.0/tests/unit/test_skills/test_managed_gitignore.py +74 -0
  206. wade_cli-0.29.0/tests/unit/test_utils/test_http.py +164 -0
  207. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_install.py +59 -9
  208. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_process.py +36 -0
  209. wade_cli-0.29.0/tests/unit/test_utils/test_terminal.py +79 -0
  210. wade_cli-0.29.0/tests/unit/test_utils/test_terminal_launch.py +513 -0
  211. wade_cli-0.29.0/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/.github/workflows/publish.yml +0 -17
  214. wade_cli-0.0.2/.github/workflows/release.yml +0 -33
  215. wade_cli-0.0.2/CHANGELOG.md +0 -9
  216. wade_cli-0.0.2/CLAUDE.md +0 -1
  217. wade_cli-0.0.2/Dockerfile +0 -37
  218. wade_cli-0.0.2/docker-compose.yml +0 -42
  219. wade_cli-0.0.2/docs/dev/testing.md +0 -121
  220. wade_cli-0.0.2/scripts/e2e_smoke.sh +0 -216
  221. wade_cli-0.0.2/scripts/probe_models.py +0 -344
  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.0}/assets/wade.png +0 -0
  280. {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/auto_version.py +0 -0
  281. {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/changelog.py +0 -0
  282. {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/check-all.sh +0 -0
  283. {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/check.sh +0 -0
  284. {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/fmt.sh +0 -0
  285. {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/hooks/pre-push +0 -0
  286. {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/install-hooks.sh +0 -0
  287. {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/probe_models.sh +0 -0
  288. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/__main__.py +0 -0
  289. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/cli/__init__.py +0 -0
  290. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/config/__init__.py +0 -0
  291. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/config/schema.py +0 -0
  292. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/db/engine.py +0 -0
  293. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/branch.py +0 -0
  294. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/logging/__init__.py +0 -0
  295. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/logging/context.py +0 -0
  296. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/logging/setup.py +0 -0
  297. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/models/deps.py +0 -0
  298. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/models/events.py +0 -0
  299. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/__init__.py +0 -0
  300. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/skills/__init__.py +0 -0
  301. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/skills/pointer.py +0 -0
  302. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/ui/__init__.py +0 -0
  303. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/__init__.py +0 -0
  304. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/clipboard.py +0 -0
  305. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/markdown.py +0 -0
  306. {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/slug.py +0 -0
  307. {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/prompts/deps-analysis.md +0 -0
  308. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/__init__.py +0 -0
  309. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/conftest.py +0 -0
  310. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/e2e/__init__.py +0 -0
  311. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/fixtures/transcripts/claude_session.txt +0 -0
  312. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/fixtures/transcripts/codex_session.txt +0 -0
  313. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  314. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/fixtures/transcripts/gemini_session.txt +0 -0
  315. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/fixtures/transcripts/generic_session.txt +0 -0
  316. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/integration/__init__.py +0 -0
  317. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/live/__init__.py +0 -0
  318. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/__init__.py +0 -0
  319. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_cli/__init__.py +0 -0
  320. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_config/__init__.py +0 -0
  321. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  322. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_db/__init__.py +0 -0
  323. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_db/test_repository_transactions.py +0 -0
  324. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/__init__.py +0 -0
  325. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/test_branch_slugify.py +0 -0
  326. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  327. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  328. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/test_worktree_remove.py +0 -0
  329. {wade_cli-0.0.2/tests/unit/test_providers → wade_cli-0.29.0/tests/unit/test_hooks}/__init__.py +0 -0
  330. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_models/__init__.py +0 -0
  331. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_models/test_db.py +0 -0
  332. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_models/test_deps_models.py +0 -0
  333. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_models/test_deps_partition.py +0 -0
  334. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/__init__.py +0 -0
  335. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  336. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/__init__.py +0 -0
  337. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_markdown.py +0 -0
  338. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_prompts.py +0 -0
  339. {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_slug.py +0 -0
  340. {wade_cli-0.0.2 → wade_cli-0.29.0}/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.
@@ -68,7 +70,7 @@ CLI modules are thin dispatch — they parse flags via Typer, then call service
68
70
  ### Key Design Patterns
69
71
 
70
72
  - **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
+ - **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
74
  - **Prompts as .md Templates**: All AI prompts live in `templates/prompts/`, not inline strings.
73
75
  - **Synchronous Only**: No asyncio. Process-level parallelism via multiple terminals.
74
76
  - **Pydantic Everywhere**: All data structures are Pydantic `BaseModel` subclasses, not dicts.
@@ -108,7 +110,7 @@ When developing WADE, **only touch the left column**. Always edit `templates/ski
108
110
  - **Functions**: `snake_case` — `_` prefix for private helpers
109
111
  - **Constants**: `UPPER_SNAKE_CASE`
110
112
  - **Enums**: `StrEnum` for string-valued enums
111
- - **CLI commands**: top-level commands (`wade plan-task`, `wade implement-task`)
113
+ - **CLI commands**: top-level commands (`wade plan`, `wade implement`)
112
114
 
113
115
  ### Commits
114
116
 
@@ -116,33 +118,6 @@ Use [Conventional Commits](https://www.conventionalcommits.org/):
116
118
  `feat:` (minor), `fix:` (patch), `docs:` (patch), `refactor:` (patch),
117
119
  `test:` (patch), `chore:` (patch). Breaking changes (`feat!:`) -> major.
118
120
 
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
121
  ## Change Checklist
147
122
 
148
123
  Before considering any work complete:
@@ -151,7 +126,7 @@ Before considering any work complete:
151
126
  - [ ] **Types + Lint** — `./scripts/check.sh` passes (or run both at once: `./scripts/check-all.sh`)
152
127
  - [ ] **`AGENTS.md`** — updated if architecture, conventions, or workflow changed
153
128
  - [ ] **`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)
129
+ - [ ] **`templates/skills/`** — updated if agent-facing rules changed (plan-session for planning, implementation-session for implementation, review-pr-comments-session for reviews)
155
130
  - [ ] **Commit** — uses conventional-commit prefix
156
131
 
157
132
  > Full 10-item checklist, documentation rules, feedback loop, and correction-driven docs: see `docs/dev/documentation-policies.md`
@@ -167,17 +142,3 @@ Read these on-demand when working in a specific area:
167
142
  | Writing or running tests | `docs/dev/testing.md` |
168
143
  | Working on skills, pointer system, or `wade init` | `docs/dev/skills-system.md` |
169
144
  | 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 -->