wade-cli 0.35.3__tar.gz → 0.50.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. wade_cli-0.50.2/.gitattributes +4 -0
  2. {wade_cli-0.35.3 → wade_cli-0.50.2}/.github/workflows/ci.yml +2 -0
  3. {wade_cli-0.35.3 → wade_cli-0.50.2}/.gitignore +2 -0
  4. {wade_cli-0.35.3 → wade_cli-0.50.2}/.wade.yml +21 -2
  5. {wade_cli-0.35.3 → wade_cli-0.50.2}/AGENTS.md +32 -4
  6. {wade_cli-0.35.3 → wade_cli-0.50.2}/CHANGELOG.md +313 -0
  7. {wade_cli-0.35.3 → wade_cli-0.50.2}/CONTRIBUTING.md +4 -3
  8. wade_cli-0.50.2/KNOWLEDGE.md +679 -0
  9. wade_cli-0.50.2/KNOWLEDGE.ratings.jsonl +126 -0
  10. wade_cli-0.50.2/PKG-INFO +825 -0
  11. wade_cli-0.50.2/README.md +789 -0
  12. wade_cli-0.50.2/docs/dev/architecture.md +979 -0
  13. {wade_cli-0.35.3 → wade_cli-0.50.2}/docs/dev/documentation-policies.md +3 -1
  14. {wade_cli-0.35.3 → wade_cli-0.50.2}/docs/dev/extending.md +3 -1
  15. wade_cli-0.50.2/docs/dev/skills-system.md +259 -0
  16. {wade_cli-0.35.3 → wade_cli-0.50.2}/docs/dev/testing.md +25 -9
  17. {wade_cli-0.35.3 → wade_cli-0.50.2}/pyproject.toml +4 -3
  18. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/check.sh +2 -2
  19. wade_cli-0.50.2/scripts/test-concurrency.sh +8 -0
  20. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/__init__.py +1 -1
  21. wade_cli-0.50.2/src/wade/cli/hook.py +45 -0
  22. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/implementation_session.py +24 -22
  23. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/knowledge.py +69 -1
  24. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/main.py +52 -3
  25. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/plan_session.py +8 -4
  26. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/review.py +56 -0
  27. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/review_pr_comments_session.py +35 -15
  28. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/session_shared.py +13 -3
  29. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/task.py +23 -1
  30. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/worktree.py +9 -2
  31. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/config/loader.py +165 -2
  32. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/config/migrations.py +48 -0
  33. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/git/__init__.py +6 -0
  34. wade_cli-0.50.2/src/wade/git/branch.py +339 -0
  35. wade_cli-0.50.2/src/wade/git/hooks.py +359 -0
  36. wade_cli-0.50.2/src/wade/git/pr.py +805 -0
  37. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/git/repo.py +303 -25
  38. wade_cli-0.50.2/src/wade/git/stash.py +213 -0
  39. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/git/sync.py +29 -16
  40. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/git/worktree.py +22 -17
  41. wade_cli-0.50.2/src/wade/hooks/__init__.py +14 -0
  42. wade_cli-0.50.2/src/wade/hooks/cli.py +875 -0
  43. wade_cli-0.50.2/src/wade/hooks/policies.py +1502 -0
  44. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/models/__init__.py +4 -0
  45. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/models/batch.py +1 -0
  46. wade_cli-0.50.2/src/wade/models/config.py +497 -0
  47. wade_cli-0.50.2/src/wade/models/delegation.py +61 -0
  48. wade_cli-0.50.2/src/wade/models/hooks.py +63 -0
  49. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/models/permission.py +23 -0
  50. wade_cli-0.50.2/src/wade/models/review.py +1034 -0
  51. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/models/session.py +5 -2
  52. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/models/task.py +43 -0
  53. wade_cli-0.50.2/src/wade/models/worktree.py +23 -0
  54. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/providers/_pr_delegate.py +4 -4
  55. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/providers/github.py +155 -25
  56. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/providers/markdown.py +4 -38
  57. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/ai_resolution.py +153 -43
  58. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/batch_review_service.py +51 -13
  59. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/check_service.py +404 -34
  60. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/delegation_service.py +172 -31
  61. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/deps_service.py +146 -30
  62. wade_cli-0.50.2/src/wade/services/implementation_service/_shared.py +193 -0
  63. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/implementation_service/batch.py +230 -73
  64. wade_cli-0.50.2/src/wade/services/implementation_service/bootstrap.py +1150 -0
  65. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/implementation_service/cleanup.py +164 -50
  66. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/implementation_service/core.py +473 -66
  67. wade_cli-0.50.2/src/wade/services/implementation_service/done.py +1261 -0
  68. wade_cli-0.50.2/src/wade/services/implementation_service/draft_pr.py +495 -0
  69. wade_cli-0.50.2/src/wade/services/implementation_service/lifecycle.py +802 -0
  70. wade_cli-0.50.2/src/wade/services/implementation_service/sync.py +1151 -0
  71. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/init_service/commands.py +24 -21
  72. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/init_service/config_io.py +95 -23
  73. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/init_service/manifest.py +13 -5
  74. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/init_service/prompts_ai.py +9 -6
  75. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/init_service/prompts_setup.py +54 -34
  76. wade_cli-0.50.2/src/wade/services/knowledge_service.py +918 -0
  77. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/plan_service.py +571 -189
  78. wade_cli-0.50.2/src/wade/services/review_delegation_service.py +503 -0
  79. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/review_service.py +621 -74
  80. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/review_settle.py +6 -24
  81. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/smart_start.py +66 -25
  82. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/task_service.py +64 -4
  83. wade_cli-0.50.2/src/wade/skills/doc_targets.py +77 -0
  84. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/skills/installer.py +161 -63
  85. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/skills/pointer.py +61 -34
  86. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/ui/console.py +65 -15
  87. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/ui/prompts.py +51 -4
  88. wade_cli-0.50.2/src/wade/utils/body_markers.py +173 -0
  89. wade_cli-0.50.2/src/wade/utils/conventional.py +86 -0
  90. wade_cli-0.50.2/src/wade/utils/filelock.py +85 -0
  91. wade_cli-0.50.2/src/wade/utils/gitref.py +49 -0
  92. wade_cli-0.50.2/src/wade/utils/knowledge_file.py +212 -0
  93. wade_cli-0.50.2/src/wade/utils/markers.py +305 -0
  94. wade_cli-0.50.2/src/wade/utils/paths.py +27 -0
  95. wade_cli-0.50.2/src/wade/utils/plan_validation.py +217 -0
  96. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/utils/process.py +43 -3
  97. wade_cli-0.50.2/src/wade/utils/stale_base.py +114 -0
  98. wade_cli-0.50.2/src/wade/utils/templates.py +73 -0
  99. wade_cli-0.50.2/templates/hooks/commit-msg +54 -0
  100. wade_cli-0.50.2/templates/hooks/pre-commit +48 -0
  101. wade_cli-0.50.2/templates/hooks/pre-push +91 -0
  102. {wade_cli-0.35.3 → wade_cli-0.50.2}/templates/prompts/deps-analysis.md +1 -1
  103. wade_cli-0.50.2/templates/prompts/implement-context.md +10 -0
  104. wade_cli-0.50.2/templates/prompts/plan-session.md +9 -0
  105. {wade_cli-0.35.3 → wade_cli-0.50.2}/templates/prompts/review-batch.md +2 -0
  106. {wade_cli-0.35.3 → wade_cli-0.50.2}/templates/prompts/review-code.md +2 -0
  107. {wade_cli-0.35.3 → wade_cli-0.50.2}/templates/prompts/review-plan.md +2 -0
  108. wade_cli-0.50.2/templates/prompts/review-pr-comments.md +18 -0
  109. wade_cli-0.50.2/templates/prompts/session-start-implement.md +4 -0
  110. wade_cli-0.50.2/templates/prompts/session-start-plan.md +3 -0
  111. wade_cli-0.50.2/templates/prompts/session-start-review.md +3 -0
  112. wade_cli-0.50.2/templates/skills/_partials/doc-update-step.md +6 -0
  113. wade_cli-0.50.2/templates/skills/_partials/knowledge-step.md +8 -0
  114. wade_cli-0.50.2/templates/skills/_partials/review-budget.md +46 -0
  115. wade_cli-0.50.2/templates/skills/_partials/review-enforcement-rule.md +12 -0
  116. wade_cli-0.50.2/templates/skills/_partials/review-implementation-closing-step.md +25 -0
  117. wade_cli-0.50.2/templates/skills/_partials/review-plan-step.md +18 -0
  118. wade_cli-0.50.2/templates/skills/_partials/user-interaction.md +33 -0
  119. {wade_cli-0.35.3 → wade_cli-0.50.2}/templates/skills/deps/SKILL.md +18 -6
  120. wade_cli-0.50.2/templates/skills/implementation-session/SKILL.md +134 -0
  121. wade_cli-0.50.2/templates/skills/implementation-session/reference/doc-update.md +38 -0
  122. wade_cli-0.50.2/templates/skills/implementation-session/reference/new-plan.md +11 -0
  123. wade_cli-0.50.2/templates/skills/implementation-session/reference/pr-summary-format.md +41 -0
  124. wade_cli-0.50.2/templates/skills/implementation-session/reference/recovery.md +129 -0
  125. wade_cli-0.50.2/templates/skills/implementation-session/reference/tracking-issues.md +28 -0
  126. {wade_cli-0.35.3 → wade_cli-0.50.2}/templates/skills/knowledge/SKILL.md +4 -0
  127. wade_cli-0.50.2/templates/skills/plan-session/SKILL.md +94 -0
  128. wade_cli-0.50.2/templates/skills/plan-session/reference/plan-format.md +82 -0
  129. wade_cli-0.50.2/templates/skills/review-pr-comments-session/SKILL.md +185 -0
  130. wade_cli-0.50.2/templates/skills/review-pr-comments-session/reference/doc-update.md +38 -0
  131. wade_cli-0.50.2/templates/skills/review-pr-comments-session/reference/recovery.md +66 -0
  132. wade_cli-0.50.2/templates/skills/task/SKILL.md +262 -0
  133. wade_cli-0.50.2/templates/skills/task/examples.md +160 -0
  134. {wade_cli-0.35.3 → wade_cli-0.50.2}/templates/skills/task/plan-format.md +5 -4
  135. wade_cli-0.50.2/templates/skills/task/reference/session-summary-format.md +105 -0
  136. wade_cli-0.50.2/tests/concurrency/test_batch_multi_pr.py +84 -0
  137. wade_cli-0.50.2/tests/concurrency/test_knowledge_merge.py +195 -0
  138. wade_cli-0.50.2/tests/concurrency/test_lock_retry.py +205 -0
  139. wade_cli-0.50.2/tests/concurrency/test_stash_race.py +90 -0
  140. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/_support.py +20 -0
  141. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/mock_gh_script.py +41 -17
  142. wade_cli-0.50.2/tests/e2e/test_implement_work_done_contract.py +713 -0
  143. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/test_knowledge_contract.py +4 -3
  144. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/test_plan_contract.py +3 -3
  145. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/test_review_contract.py +123 -3
  146. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/test_task_contract.py +1 -1
  147. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/integration/test_autostash.py +6 -3
  148. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/integration/test_git.py +5 -5
  149. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/integration/test_knowledge.py +4 -2
  150. wade_cli-0.50.2/tests/integration/test_skill_context_budget.py +134 -0
  151. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/integration/test_skill_install.py +307 -11
  152. wade_cli-0.50.2/tests/unit/test_cli/test_done_doc_pass_advisory.py +88 -0
  153. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_cli/test_done_review_hint.py +14 -54
  154. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_cli/test_knowledge_cli.py +147 -22
  155. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_cli/test_review_cli.py +84 -23
  156. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_cli/test_work_cli.py +3 -1
  157. wade_cli-0.50.2/tests/unit/test_config/test_bot_review_config.py +289 -0
  158. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_config/test_loader.py +204 -0
  159. wade_cli-0.50.2/tests/unit/test_config/test_merge_strategy_migration.py +69 -0
  160. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_config/test_migrations.py +64 -0
  161. wade_cli-0.50.2/tests/unit/test_console.py +91 -0
  162. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_effort.py +31 -0
  163. wade_cli-0.50.2/tests/unit/test_git/test_all_patches_present.py +49 -0
  164. wade_cli-0.50.2/tests/unit/test_git/test_branch_list.py +40 -0
  165. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_git/test_detached_worktree.py +3 -3
  166. wade_cli-0.50.2/tests/unit/test_git/test_is_merged_into.py +38 -0
  167. wade_cli-0.50.2/tests/unit/test_git/test_main_checkout_root.py +33 -0
  168. wade_cli-0.50.2/tests/unit/test_git/test_merge_count.py +42 -0
  169. wade_cli-0.50.2/tests/unit/test_git/test_pr_lookup.py +153 -0
  170. wade_cli-0.50.2/tests/unit/test_git/test_pr_retry.py +373 -0
  171. wade_cli-0.50.2/tests/unit/test_git/test_pr_title.py +38 -0
  172. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_git/test_repo.py +31 -1
  173. wade_cli-0.50.2/tests/unit/test_git/test_reset_branch.py +67 -0
  174. wade_cli-0.50.2/tests/unit/test_git/test_stash_drop.py +53 -0
  175. wade_cli-0.50.2/tests/unit/test_git/test_tip_commit_is_empty.py +88 -0
  176. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_git/test_worktree_remove.py +9 -9
  177. wade_cli-0.50.2/tests/unit/test_hooks/test_hook_cli.py +885 -0
  178. wade_cli-0.50.2/tests/unit/test_hooks/test_policies.py +1150 -0
  179. wade_cli-0.50.2/tests/unit/test_hooks/test_post_tool_use.py +282 -0
  180. wade_cli-0.50.2/tests/unit/test_hooks/test_session_start.py +595 -0
  181. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_models/test_config_models.py +54 -0
  182. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_models/test_delegation.py +23 -1
  183. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_models/test_review.py +265 -8
  184. wade_cli-0.50.2/tests/unit/test_models/test_review_expectation.py +248 -0
  185. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_models/test_task_models.py +61 -0
  186. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_permission_mode.py +140 -0
  187. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_providers/test_github.py +87 -0
  188. wade_cli-0.50.2/tests/unit/test_providers/test_github_pr.py +403 -0
  189. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_ai_resolution.py +271 -2
  190. wade_cli-0.50.2/tests/unit/test_services/test_batch_build_cmd.py +161 -0
  191. wade_cli-0.50.2/tests/unit/test_services/test_batch_pr_index.py +94 -0
  192. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_batch_review_service.py +44 -3
  193. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_bootstrap_allowlist.py +203 -61
  194. wade_cli-0.50.2/tests/unit/test_services/test_bootstrap_post_tool_use.py +195 -0
  195. wade_cli-0.50.2/tests/unit/test_services/test_bootstrap_pre_push.py +130 -0
  196. wade_cli-0.50.2/tests/unit/test_services/test_bootstrap_session_start.py +296 -0
  197. wade_cli-0.50.2/tests/unit/test_services/test_bot_trigger.py +384 -0
  198. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_catchup.py +52 -0
  199. wade_cli-0.50.2/tests/unit/test_services/test_catchup_reconcile.py +544 -0
  200. wade_cli-0.50.2/tests/unit/test_services/test_check.py +796 -0
  201. wade_cli-0.50.2/tests/unit/test_services/test_cleanup_loss_guard.py +275 -0
  202. wade_cli-0.50.2/tests/unit/test_services/test_codex_worktree_launch_context.py +144 -0
  203. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_delegation_service.py +184 -3
  204. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_deps_service.py +414 -8
  205. wade_cli-0.50.2/tests/unit/test_services/test_done_gates.py +574 -0
  206. wade_cli-0.50.2/tests/unit/test_services/test_done_idempotent.py +97 -0
  207. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_done_plan_flag.py +36 -1
  208. wade_cli-0.50.2/tests/unit/test_services/test_done_pr_title_sync.py +223 -0
  209. wade_cli-0.50.2/tests/unit/test_services/test_draft_pr_base_fetch.py +148 -0
  210. wade_cli-0.50.2/tests/unit/test_services/test_draft_pr_retarget.py +479 -0
  211. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_implementation_done_sync.py +144 -13
  212. wade_cli-0.50.2/tests/unit/test_services/test_implementation_launch_context.py +166 -0
  213. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_implementation_service.py +1176 -89
  214. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_init.py +229 -55
  215. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_knowledge_service.py +217 -19
  216. wade_cli-0.50.2/tests/unit/test_services/test_managed_git_hooks.py +343 -0
  217. wade_cli-0.50.2/tests/unit/test_services/test_no_direct_git.py +174 -0
  218. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_plan_service.py +944 -3
  219. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_poll_for_reviews.py +227 -23
  220. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_post_implementation_lifecycle.py +266 -104
  221. wade_cli-0.50.2/tests/unit/test_services/test_pr_lookup_guards.py +52 -0
  222. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_pr_summary_path.py +17 -4
  223. wade_cli-0.50.2/tests/unit/test_services/test_pre_push_backstop.py +274 -0
  224. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_preserve_session_data.py +37 -98
  225. wade_cli-0.50.2/tests/unit/test_services/test_push_recovery.py +159 -0
  226. wade_cli-0.50.2/tests/unit/test_services/test_resolve_task_branch.py +240 -0
  227. wade_cli-0.50.2/tests/unit/test_services/test_resume_autonomy.py +39 -0
  228. wade_cli-0.50.2/tests/unit/test_services/test_review_delegation_service.py +1478 -0
  229. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_review_service.py +793 -35
  230. wade_cli-0.50.2/tests/unit/test_services/test_review_status_block.py +406 -0
  231. wade_cli-0.50.2/tests/unit/test_services/test_reviewed_marker.py +222 -0
  232. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_smart_start.py +178 -34
  233. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_smart_start_resume.py +21 -11
  234. wade_cli-0.50.2/tests/unit/test_services/test_stale_base_surface.py +274 -0
  235. wade_cli-0.50.2/tests/unit/test_services/test_sync_base_branch.py +229 -0
  236. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_task_service.py +126 -10
  237. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_tracked_managed_files.py +186 -14
  238. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_worktree_gitignore.py +17 -2
  239. wade_cli-0.50.2/tests/unit/test_skills/test_doc_targets.py +119 -0
  240. wade_cli-0.50.2/tests/unit/test_skills/test_knowledge_attributes.py +89 -0
  241. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_skills/test_managed_gitignore.py +2 -0
  242. wade_cli-0.50.2/tests/unit/test_skills/test_pointer.py +42 -0
  243. wade_cli-0.50.2/tests/unit/test_skills/test_review_budget_partial.py +65 -0
  244. wade_cli-0.50.2/tests/unit/test_utils/test_body_markers.py +120 -0
  245. wade_cli-0.50.2/tests/unit/test_utils/test_conventional.py +99 -0
  246. wade_cli-0.50.2/tests/unit/test_utils/test_filelock.py +52 -0
  247. wade_cli-0.50.2/tests/unit/test_utils/test_gitref.py +66 -0
  248. wade_cli-0.50.2/tests/unit/test_utils/test_markers.py +153 -0
  249. wade_cli-0.50.2/tests/unit/test_utils/test_plan_validation.py +155 -0
  250. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_utils/test_process.py +87 -0
  251. wade_cli-0.50.2/tests/unit/test_utils/test_prompts.py +92 -0
  252. wade_cli-0.50.2/tests/unit/test_utils/test_stale_base.py +80 -0
  253. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_yolo.py +6 -3
  254. wade_cli-0.35.3/KNOWLEDGE.md +0 -239
  255. wade_cli-0.35.3/KNOWLEDGE.ratings.yml +0 -98
  256. wade_cli-0.35.3/PKG-INFO +0 -353
  257. wade_cli-0.35.3/README.md +0 -316
  258. wade_cli-0.35.3/docs/dev/architecture.md +0 -333
  259. wade_cli-0.35.3/docs/dev/skills-system.md +0 -135
  260. wade_cli-0.35.3/src/wade/db/__init__.py +0 -34
  261. wade_cli-0.35.3/src/wade/db/engine.py +0 -85
  262. wade_cli-0.35.3/src/wade/db/repositories.py +0 -266
  263. wade_cli-0.35.3/src/wade/db/tables.py +0 -131
  264. wade_cli-0.35.3/src/wade/git/branch.py +0 -140
  265. wade_cli-0.35.3/src/wade/git/pr.py +0 -427
  266. wade_cli-0.35.3/src/wade/git/stash.py +0 -122
  267. wade_cli-0.35.3/src/wade/hooks/__init__.py +0 -19
  268. wade_cli-0.35.3/src/wade/hooks/plan_write_guard.py +0 -199
  269. wade_cli-0.35.3/src/wade/hooks/worktree_guard.py +0 -185
  270. wade_cli-0.35.3/src/wade/models/config.py +0 -260
  271. wade_cli-0.35.3/src/wade/models/delegation.py +0 -44
  272. wade_cli-0.35.3/src/wade/models/review.py +0 -517
  273. wade_cli-0.35.3/src/wade/services/implementation_service/_shared.py +0 -55
  274. wade_cli-0.35.3/src/wade/services/implementation_service/bootstrap.py +0 -529
  275. wade_cli-0.35.3/src/wade/services/implementation_service/done.py +0 -488
  276. wade_cli-0.35.3/src/wade/services/implementation_service/draft_pr.py +0 -191
  277. wade_cli-0.35.3/src/wade/services/implementation_service/lifecycle.py +0 -500
  278. wade_cli-0.35.3/src/wade/services/implementation_service/sync.py +0 -722
  279. wade_cli-0.35.3/src/wade/services/knowledge_service.py +0 -807
  280. wade_cli-0.35.3/src/wade/services/review_delegation_service.py +0 -262
  281. wade_cli-0.35.3/templates/prompts/implement-context.md +0 -19
  282. wade_cli-0.35.3/templates/prompts/plan-session.md +0 -58
  283. wade_cli-0.35.3/templates/prompts/review-pr-comments.md +0 -23
  284. wade_cli-0.35.3/templates/skills/_partials/review-enforcement-rule.md +0 -8
  285. wade_cli-0.35.3/templates/skills/_partials/review-implementation-closing-step.md +0 -24
  286. wade_cli-0.35.3/templates/skills/_partials/review-plan-step.md +0 -17
  287. wade_cli-0.35.3/templates/skills/_partials/user-interaction.md +0 -5
  288. wade_cli-0.35.3/templates/skills/implementation-session/SKILL.md +0 -341
  289. wade_cli-0.35.3/templates/skills/plan-session/SKILL.md +0 -176
  290. wade_cli-0.35.3/templates/skills/review-pr-comments-session/SKILL.md +0 -247
  291. wade_cli-0.35.3/templates/skills/task/SKILL.md +0 -187
  292. wade_cli-0.35.3/templates/skills/task/examples.md +0 -132
  293. wade_cli-0.35.3/tests/e2e/test_implement_work_done_contract.py +0 -360
  294. wade_cli-0.35.3/tests/unit/test_console.py +0 -29
  295. wade_cli-0.35.3/tests/unit/test_db/test_repository_transactions.py +0 -114
  296. wade_cli-0.35.3/tests/unit/test_hooks/test_plan_write_guard.py +0 -276
  297. wade_cli-0.35.3/tests/unit/test_hooks/test_worktree_guard.py +0 -250
  298. wade_cli-0.35.3/tests/unit/test_models/test_db.py +0 -200
  299. wade_cli-0.35.3/tests/unit/test_providers/test_github_pr.py +0 -94
  300. wade_cli-0.35.3/tests/unit/test_services/test_check.py +0 -395
  301. wade_cli-0.35.3/tests/unit/test_services/test_done_via_direct_cleanup.py +0 -279
  302. wade_cli-0.35.3/tests/unit/test_services/test_review_delegation_service.py +0 -717
  303. wade_cli-0.35.3/tests/unit/test_services/test_sync_base_branch.py +0 -115
  304. wade_cli-0.35.3/tests/unit/test_utils/test_prompts.py +0 -48
  305. {wade_cli-0.35.3 → wade_cli-0.50.2}/.github/workflows/auto-version.yml +0 -0
  306. {wade_cli-0.35.3 → wade_cli-0.50.2}/.github/workflows/pr-title-lint.yml +0 -0
  307. {wade_cli-0.35.3 → wade_cli-0.50.2}/.github/workflows/publish.yml +0 -0
  308. {wade_cli-0.35.3 → wade_cli-0.50.2}/.github/workflows/release.yml +0 -0
  309. {wade_cli-0.35.3 → wade_cli-0.50.2}/.pre-commit-config.yaml +0 -0
  310. {wade_cli-0.35.3 → wade_cli-0.50.2}/assets/wade.png +0 -0
  311. {wade_cli-0.35.3 → wade_cli-0.50.2}/docker-compose.e2e.yml +0 -0
  312. {wade_cli-0.35.3 → wade_cli-0.50.2}/install.sh +0 -0
  313. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/auto_version.py +0 -0
  314. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/changelog.py +0 -0
  315. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/check-all.sh +0 -0
  316. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/fmt.sh +0 -0
  317. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/hooks/pre-push +0 -0
  318. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/install-hooks.sh +0 -0
  319. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/release.sh +0 -0
  320. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/setup-worktree.sh +0 -0
  321. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/test-e2e-docker.sh +0 -0
  322. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/test-e2e.sh +0 -0
  323. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/test-live-ai-taskr.sh +0 -0
  324. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/test-live-ai.sh +0 -0
  325. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/test-live-gh.sh +0 -0
  326. {wade_cli-0.35.3 → wade_cli-0.50.2}/scripts/test.sh +0 -0
  327. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/__main__.py +0 -0
  328. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/__init__.py +0 -0
  329. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/admin.py +0 -0
  330. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/cli/autocomplete.py +0 -0
  331. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/config/__init__.py +0 -0
  332. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/config/schema.py +0 -0
  333. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/logging/__init__.py +0 -0
  334. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/logging/context.py +0 -0
  335. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/logging/setup.py +0 -0
  336. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/models/deps.py +0 -0
  337. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/models/events.py +0 -0
  338. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/providers/__init__.py +0 -0
  339. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/providers/base.py +0 -0
  340. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/providers/clickup.py +0 -0
  341. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/providers/registry.py +0 -0
  342. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/__init__.py +0 -0
  343. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/implementation_service/__init__.py +0 -0
  344. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/implementation_service/usage_tracking.py +0 -0
  345. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/init_service/__init__.py +0 -0
  346. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/init_service/auth.py +0 -0
  347. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/init_service/migrations.py +0 -0
  348. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/init_service/shell.py +0 -0
  349. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/knowledge_search.py +0 -0
  350. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/services/prompt_delivery.py +0 -0
  351. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/skills/__init__.py +0 -0
  352. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/ui/__init__.py +0 -0
  353. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/utils/__init__.py +0 -0
  354. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/utils/clipboard.py +0 -0
  355. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/utils/http.py +0 -0
  356. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/utils/install.py +0 -0
  357. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/utils/markdown.py +0 -0
  358. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/utils/slug.py +0 -0
  359. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/utils/terminal.py +0 -0
  360. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/utils/token_usage_markdown.py +0 -0
  361. {wade_cli-0.35.3 → wade_cli-0.50.2}/src/wade/utils/update_check.py +0 -0
  362. {wade_cli-0.35.3 → wade_cli-0.50.2}/templates/agents-pointer.md +0 -0
  363. {wade_cli-0.35.3 → wade_cli-0.50.2}/templates/setup-worktree.sh.example +0 -0
  364. {wade_cli-0.35.3 → wade_cli-0.50.2}/templates/statusline-command.sh +0 -0
  365. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/__init__.py +0 -0
  366. {wade_cli-0.35.3/tests/unit/test_db → wade_cli-0.50.2/tests/concurrency}/__init__.py +0 -0
  367. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/conftest.py +0 -0
  368. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/__init__.py +0 -0
  369. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/conftest.py +0 -0
  370. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/test_admin_contract.py +0 -0
  371. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/test_check_contract.py +0 -0
  372. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/test_mock_gh_contract.py +0 -0
  373. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/test_smart_start_contract.py +0 -0
  374. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/e2e/test_work_sync_list_contract.py +0 -0
  375. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
  376. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
  377. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/fixtures/transcripts/claude_session.txt +0 -0
  378. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/fixtures/transcripts/codex_session.txt +0 -0
  379. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  380. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/fixtures/transcripts/generic_session.txt +0 -0
  381. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/integration/__init__.py +0 -0
  382. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/integration/test_check.py +0 -0
  383. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/integration/test_implementation_lifecycle.py +0 -0
  384. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/integration/test_init.py +0 -0
  385. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/integration/test_markdown_provider.py +0 -0
  386. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/live/__init__.py +0 -0
  387. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/live/test_wade_live_ai.py +0 -0
  388. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/live/test_wade_live_ai_taskr.py +0 -0
  389. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/live/test_wade_live_gh.py +0 -0
  390. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/test_cli_basics.py +0 -0
  391. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/__init__.py +0 -0
  392. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/conftest.py +0 -0
  393. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_cli/__init__.py +0 -0
  394. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_cli/test_session_subapps.py +0 -0
  395. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_cli/test_shell_init.py +0 -0
  396. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_cli/test_task_cli.py +0 -0
  397. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
  398. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_config/__init__.py +0 -0
  399. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  400. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_git/__init__.py +0 -0
  401. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_git/test_branch_slugify.py +0 -0
  402. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_git/test_pr_base.py +0 -0
  403. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  404. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  405. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_hooks/__init__.py +0 -0
  406. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_models/__init__.py +0 -0
  407. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_models/test_batch.py +0 -0
  408. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_models/test_deps_models.py +0 -0
  409. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_models/test_deps_partition.py +0 -0
  410. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_providers/__init__.py +0 -0
  411. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_providers/test_clickup.py +0 -0
  412. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_providers/test_markdown.py +0 -0
  413. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/__init__.py +0 -0
  414. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
  415. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
  416. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  417. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_knowledge_search.py +0 -0
  418. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_services/test_prompt_delivery.py +0 -0
  419. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_utils/__init__.py +0 -0
  420. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_utils/test_http.py +0 -0
  421. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_utils/test_install.py +0 -0
  422. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_utils/test_markdown.py +0 -0
  423. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_utils/test_slug.py +0 -0
  424. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_utils/test_terminal.py +0 -0
  425. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_utils/test_terminal_launch.py +0 -0
  426. {wade_cli-0.35.3 → wade_cli-0.50.2}/tests/unit/test_utils/test_update_check.py +0 -0
@@ -0,0 +1,4 @@
1
+ # wade:knowledge:start
2
+ KNOWLEDGE.md merge=union
3
+ KNOWLEDGE.ratings.jsonl merge=union
4
+ # wade:knowledge:end
@@ -60,6 +60,8 @@ jobs:
60
60
  run: ./scripts/test.sh tests/unit/
61
61
  - name: Run integration tests
62
62
  run: ./scripts/test.sh tests/integration/
63
+ - name: Run concurrency lane (shared git/remote state)
64
+ run: ./scripts/test-concurrency.sh
63
65
  - name: Run top-level CLI contract smoke
64
66
  run: ./scripts/test.sh tests/test_cli_basics.py
65
67
 
@@ -28,11 +28,13 @@ htmlcov/
28
28
  # AI tool directories (wade-managed — never committed in this repo)
29
29
  .agents/
30
30
  .claude/
31
+ .codex/
31
32
  .copilot/
32
33
  .cursor/
33
34
  .gemini/
34
35
  .github/hooks/
35
36
  .github/skills
37
+ .wade/
36
38
  CLAUDE.md
37
39
  PLAN.md
38
40
  PR-SUMMARY.md
@@ -12,23 +12,28 @@ ai:
12
12
  plan:
13
13
  effort: xhigh
14
14
  yolo: true
15
+ implement:
16
+ yolo: true
15
17
  deps:
16
18
  tool: claude
17
19
  model: claude-sonnet-5
18
20
  mode: headless
19
21
  effort: high
22
+ timeout: 900
20
23
  review_plan:
21
24
  tool: claude
22
25
  model: claude-sonnet-5
23
26
  mode: headless
24
27
  effort: high
25
28
  enabled: true
29
+ timeout: 900
26
30
  review_implementation:
27
31
  tool: claude
28
32
  model: claude-sonnet-5
29
33
  mode: headless
30
34
  effort: high
31
35
  enabled: true
36
+ timeout: 900
32
37
  review_batch:
33
38
  tool: claude
34
39
  model: claude-sonnet-5
@@ -53,6 +58,22 @@ models:
53
58
  effort: xhigh
54
59
  provider:
55
60
  name: github
61
+ bot_review:
62
+ # This repo runs CodeRabbit + Codex, not Cursor Bugbot. Bugbot is disabled so
63
+ # expectation-verified completion (#448) doesn't wait arrival_timeout for a
64
+ # review that never arrives on every review check. arrival_timeout/ack_timeout
65
+ # keep their defaults (300s / 900s).
66
+ auto_trigger: false
67
+ bots:
68
+ - name: coderabbit
69
+ trigger: '@coderabbitai review'
70
+ enabled: true
71
+ - name: codex
72
+ trigger: '@codex review'
73
+ enabled: true
74
+ - name: bugbot
75
+ trigger: bugbot run
76
+ enabled: false
56
77
  knowledge:
57
78
  enabled: true
58
79
  path: KNOWLEDGE.md
@@ -61,5 +82,3 @@ hooks:
61
82
  copy_to_worktree:
62
83
  - .env
63
84
  - .wade.yml
64
- - KNOWLEDGE.md
65
- - KNOWLEDGE.ratings.yml
@@ -16,8 +16,8 @@ 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
  | **skill templates** | Markdown files in `templates/skills/` — the source of truth, part of the WADE repo |
19
- | **installed skills** | Copies (or symlinks) of skill templates placed in a project's `.claude/skills/` by `wade init` |
20
- | **AGENTS.md pointer** | A short `## Git Workflow` block that `wade init` injects into an inited project's `AGENTS.md` |
19
+ | **installed skills** | Copies (or symlinks) of skill templates placed in a project's `.claude/skills/` **per session by worktree bootstrap** (`bootstrap_worktree`), not by `wade init` |
20
+ | **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` |
21
21
 
22
22
  **This `AGENTS.md` governs development of WADE itself.** Skills, the pointer, and the progressive disclosure architecture are all *outputs* of WADE — artifacts installed into inited projects, not rules for developing WADE.
23
23
 
@@ -53,15 +53,34 @@ uv run python scripts/auto_version.py patch # Version bump (patch/minor/major)
53
53
 
54
54
  ```
55
55
  CLI Layer -> can import: services, models, config, logging, ui
56
- Service Layer -> can import: providers, crossby (AI tool adapters), git, db, models, config, logging
56
+ Service Layer -> can import: providers, crossby (AI tool adapters), git, models, config, logging
57
57
  Provider Layer -> can import: models, config, logging (NO service imports)
58
58
  Git Layer -> can import: models, config, logging (NO service imports)
59
- DB Layer -> can import: models, logging (NO config imports)
60
59
  Models Layer -> can import: nothing (leaf dependency)
61
60
  ```
62
61
 
63
62
  No circular dependencies. Models are pure data. Services orchestrate. **Never import a higher layer from a lower layer.**
64
63
 
64
+ > **The `db/` package is unused scaffolding** — intentionally left out of the
65
+ > layering rules above. No code path under `services/` or `cli/` writes
66
+ > session/worktree/PR rows, so its sole reader
67
+ > (`implementation_service/cleanup._preserve_session_data`, a single
68
+ > `SessionRepository.get_by_worktree_path` call) always gets an empty result and
69
+ > falls back to directory-presence detection. Real persisted state lives in
70
+ > GitHub (PR/issue body markers, labels) and worktree files, **not** SQLite. The
71
+ > code still exists but is inert; removal is tracked as #357 C5.
72
+
73
+ > **Deterministic git-hook install/reconcile/build logic lives in `git/hooks.py`**
74
+ > (git layer), not `skills/installer.py`. Packaged template-asset loaders
75
+ > (prompt/skill/hook templates) live in `utils/templates.py`, a leaf module.
76
+ > Leaf `utils/` modules import nothing from wade, so any layer — including the
77
+ > git layer — may import them without breaking the rules above.
78
+ > `skills` itself is a lower utility/template layer — services may import it for
79
+ > **skill-file management** (`install_skills`, the `*_SKILLS` registries,
80
+ > `ensure_knowledge_merge_attributes`, gitignore/cross-tool constants), never the
81
+ > reverse. Those residual `service -> skills` imports are sanctioned, not
82
+ > layering violations.
83
+
65
84
  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
85
 
67
86
  CLI modules are thin dispatch — they parse flags via Typer, then call service methods. Business logic lives in `services/`, not in `cli/`.
@@ -100,6 +119,8 @@ Everything in this repo exists in one of two worlds:
100
119
 
101
120
  When developing WADE, **only touch the left column**. Always edit `templates/skills/<name>/SKILL.md` directly — never edit files inside `.claude/skills/` (those are symlinks in this repo, copies in inited projects).
102
121
 
122
+ The right-column artifacts (installed skills, the `## Git Workflow` pointer, and the Claude/Cursor allowlists) are produced **per session by worktree bootstrap** (`bootstrap_worktree` in `implementation_service/bootstrap.py`, invoked by `wade implement`/`wade plan`/`wade review` and by a standalone `wade task deps`), *not* by `wade init`. `wade init` writes only `.wade.yml`, optional provider/knowledge files, and the `.wade/` manifest.
123
+
103
124
  > Skills system deep dive (symlinks, pointer markers, installation lifecycle): see `docs/dev/skills-system.md`
104
125
 
105
126
  ## Conventions
@@ -130,6 +151,13 @@ Before considering any work complete:
130
151
  - [ ] **`templates/skills/`** — updated if agent-facing rules changed (plan-session for planning, implementation-session for implementation, review-pr-comments-session for reviews)
131
152
  - [ ] **Commit** — uses conventional-commit prefix
132
153
 
154
+ Note: for inited projects, the doc update pass is now an explicit, mandatory
155
+ closing step in the installed `implementation-session` and
156
+ `review-pr-comments-session` skills (`{doc_update_step}` /
157
+ `templates/skills/_partials/doc-update-step.md`) — not something an agent has
158
+ to remember on its own. This repo's own checklist above is unaffected; it
159
+ still governs what WADE-repo changes require here.
160
+
133
161
  > Full 10-item checklist, documentation rules, feedback loop, and correction-driven docs: see `docs/dev/documentation-policies.md`
134
162
 
135
163
  ## Detailed Reference
@@ -4,6 +4,319 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Conventional Commits](https://conventionalcommits.org/).
6
6
 
7
+ ## [v0.50.2] — 2026-08-19
8
+
9
+ ### Bug Fixes
10
+
11
+ - list uncommitted files before the PR-merge "work will be lost" prompt (#454) (932c645)
12
+
13
+ ## [v0.50.1] — 2026-08-18
14
+
15
+ ### Chores
16
+
17
+ - bump crossby to v0.24.3 (#452) (403daa8)
18
+
19
+ ## [v0.50.0] — 2026-08-18
20
+
21
+ ### Features
22
+
23
+ - harden and align review-pass budget and skip guidance across workflows (#451) (cef9d99)
24
+
25
+ ## [v0.49.1] — 2026-08-18
26
+
27
+ ### Bug Fixes
28
+
29
+ - don't report review bots done until they've actually reviewed (#449) (01a3192)
30
+
31
+ ## [v0.49.0] — 2026-08-18
32
+
33
+ ### Features
34
+
35
+ - standardize WADE session summaries with emoji status and decisive dialog prompts (#444) (4c4d730)
36
+
37
+ ## [v0.48.5] — 2026-08-18
38
+
39
+ ### Documentation
40
+
41
+ - align installed agent guidance with the plan-driven lifecycle (#442) (d5dbcfc)
42
+
43
+ ## [v0.48.4] — 2026-08-18
44
+
45
+ ### Bug Fixes
46
+
47
+ - wrap long choices in interactive pickers instead of cropping (#446) (6b162b6)
48
+
49
+ ## [v0.48.3] — 2026-08-18
50
+
51
+ ### Documentation
52
+
53
+ - reconcile developer references with the current codebase (#440) (c20a564)
54
+
55
+ ## [v0.48.2] — 2026-08-17
56
+
57
+ ### Documentation
58
+
59
+ - refresh public onboarding and product positioning (#438) (3f822e2)
60
+
61
+ ## [v0.48.1] — 2026-08-17
62
+
63
+ ### Documentation
64
+
65
+ - tighten session-skill communication — terse reporting and unambiguous exit/complete signaling (#436) (0384f72)
66
+
67
+ ## [v0.48.0] — 2026-08-17
68
+
69
+ ### Features
70
+
71
+ - add config-driven bot-review trigger command with optional auto-trigger (#432) (fc2ff0d)
72
+
73
+ ## [v0.47.0] — 2026-08-17
74
+
75
+ ### Features
76
+
77
+ - adopt crossby 0.24.0 refreshed AI-tool model catalogs (#434) (3842332)
78
+
79
+ ## [v0.46.1] — 2026-08-16
80
+
81
+ ### Bug Fixes
82
+
83
+ - propagate Codex worktree launch context through sessions (#429) (032daa2)
84
+
85
+ ## [v0.45.10] — 2026-08-16
86
+
87
+ ### Bug Fixes
88
+
89
+ - resolve branch by issue number so retitled issues resume their PR/plan (#428) (c840b5e)
90
+
91
+ ## [v0.45.9] — 2026-08-16
92
+
93
+ ### Bug Fixes
94
+
95
+ - apply resolved autonomy mode to resumed implementation sessions (#427) (30cc8c9)
96
+
97
+ ## [v0.45.8] — 2026-08-16
98
+
99
+ ### Chores
100
+
101
+ - default implementation sessions to yolo, matching plan/review_batch (#424) (43054af)
102
+
103
+ ## [v0.45.7] — 2026-08-16
104
+
105
+ ### Bug Fixes
106
+
107
+ - preserve user-set ai.implement keys on re-init (#425) (71a25db)
108
+
109
+ ## [v0.45.6] — 2026-08-16
110
+
111
+ ### Bug Fixes
112
+
113
+ - forward resolved permission mode to child sessions when explicit (#426) (fbdd9c9)
114
+
115
+ ## [v0.45.5] — 2026-08-16
116
+
117
+ ### Bug Fixes
118
+
119
+ - drop done.require_review: false bypass hint from done review-refusal output (#422) (5424a00)
120
+
121
+ ## [v0.45.4] — 2026-08-15
122
+
123
+ ### Bug Fixes
124
+
125
+ - _pull_main_after_merge untracked-collision backup is never restored on retry failure (#420) (de59eb7)
126
+
127
+ ## [v0.45.3] — 2026-08-14
128
+
129
+ ### Bug Fixes
130
+
131
+ - resolve worktree/branch by issue number + project-scope UX (#417) (6158a41)
132
+
133
+ ## [v0.45.2] — 2026-08-13
134
+
135
+ ### Refactoring
136
+
137
+ - shared typed worktree model for list_worktrees() consumers (#416) (69931c7)
138
+
139
+ ## [v0.45.1] — 2026-08-13
140
+
141
+ ### Bug Fixes
142
+
143
+ - merge_pr hard-fails on recoverable "Head branch is out of date" (stale PR head sync) (#415) (d81a658)
144
+
145
+ ## [v0.45.0] — 2026-08-13
146
+
147
+ ### Features
148
+
149
+ - support a configurable base branch for plans and implementation (#377) (7bbde95)
150
+
151
+ ## [v0.44.3] — 2026-08-12
152
+
153
+ ### Refactoring
154
+
155
+ - move deterministic git-hook logic out of skills.installer (service-layer boundary) (#412) (d93468d)
156
+
157
+ ## [v0.44.2] — 2026-08-12
158
+
159
+ ### Bug Fixes
160
+
161
+ - allow writes to system temp dirs through worktree/plan write-guards (#410) (81fcf74)
162
+
163
+ ## [v0.44.1] — 2026-08-12
164
+
165
+ ### Bug Fixes
166
+
167
+ - wade implement startup catchup silently aborts on knowledge-store-migration untracked_conflict, leaving the session on a stale base (#408) (9968583)
168
+
169
+ ## [v0.44.0] — 2026-08-12
170
+
171
+ ### Features
172
+
173
+ - make WADE session output report-by-exception (terse on success) (#402) (9f96c94)
174
+
175
+ ## [v0.43.0] — 2026-08-11
176
+
177
+ ### Features
178
+
179
+ - allow AI-tool memory writes through worktree/plan write-guards (#388) (338a31c)
180
+
181
+ ## [v0.42.6] — 2026-08-11
182
+
183
+ ### Bug Fixes
184
+
185
+ - always surface the resolved permission mode and honor it in review sessions (#380) (01beb8a)
186
+
187
+ ## [v0.42.5] — 2026-08-11
188
+
189
+ ### Bug Fixes
190
+
191
+ - a timed-out headless review loses everything and is likely to time out again (#406) (1050ff9)
192
+
193
+ ## [v0.42.4] — 2026-08-10
194
+
195
+ ### Bug Fixes
196
+
197
+ - restore nested-session guard for Antigravity CLI in wade implement (#405) (8d16c06)
198
+
199
+ ## [v0.42.3] — 2026-08-10
200
+
201
+ ### Bug Fixes
202
+
203
+ - don't declare review complete when bot hasn't reviewed the latest commit (#404) (f36ed80)
204
+
205
+ ## [v0.42.2] — 2026-08-10
206
+
207
+ ### Bug Fixes
208
+
209
+ - `done` cannot tell a clean review from one that never ran (#400) (8788d52)
210
+
211
+ ## [v0.42.1] — 2026-08-10
212
+
213
+ ### Chores
214
+
215
+ - remove dead pre-push install wrappers superseded by the batch git-hook API (#399) (e39517a)
216
+
217
+ ## [v0.42.0] — 2026-08-09
218
+
219
+ ### Features
220
+
221
+ - enforce conventional-commit PR & issue titles across creation and done (#393) (c3f13d5)
222
+
223
+ ## [v0.41.1] — 2026-08-09
224
+
225
+ ### Bug Fixes
226
+
227
+ - allow /dev/ device writes in plan-mode write guard (#398) (adc6c61)
228
+
229
+ ### Other Changes
230
+
231
+ - Lock-retry for `git stash push` is git-version-dependent (follow-up to #357 C3) (#396) (27e0eb9)
232
+
233
+ ## [v0.41.0] — 2026-08-08
234
+
235
+ ### Features
236
+
237
+ - re-inject session context on start/resume/compaction (#351) (#391) (8a9c0ed)
238
+
239
+ ### Other Changes
240
+
241
+ - wade review crashes with Rich MarkupError when reviewer feedback contains bracket markup (#395) (2a224a6)
242
+
243
+ ## [v0.40.0] — 2026-08-08
244
+
245
+ ### Features
246
+
247
+ - honor a dedicated ai.review_pr_comments config for the auto-launched review session (#390) (d6b920e)
248
+
249
+ ### Other Changes
250
+
251
+ - H3: Knowledge lifecycle — worktree-local, reviewed and merged through the PR (#386) (26af39f)
252
+
253
+ ## [v0.39.3] — 2026-08-07
254
+
255
+ ### Bug Fixes
256
+
257
+ - bound implementation-session review loop with a code-enforced 2-pass cap (#385) (3ed4f04)
258
+
259
+ ### Other Changes
260
+
261
+ - E4: Repo-quality gates — pre-commit + commit-msg git hooks, and PostToolUse feedback (#381) (123727a)
262
+ - E2: Plan-phase enforcement (auto-validate + plan Stop guard) (#378) (92e6b43)
263
+ - E1: Make `done` the authoritative completion gate (+ pre-push backstop, + realign Stop) (#375) (2445c55)
264
+
265
+ ## [v0.39.2] — 2026-08-05
266
+
267
+ ### Chores
268
+
269
+ - stop tracking KNOWLEDGE.md/KNOWLEDGE.ratings.yml in git (c6a78b1)
270
+
271
+ ### Other Changes
272
+
273
+ - H4: Drift &amp; layering — AGENTS.md, architecture.md, crossby hook comments, raw subprocess in services (#365) (3ae0ff3)
274
+
275
+ ## [v0.39.1] — 2026-08-05
276
+
277
+ ### Bug Fixes
278
+
279
+ - allow shell reads outside the worktree, block only writes (#373) (d9dc842)
280
+
281
+ ## [v0.39.0] — 2026-08-05
282
+
283
+ ### Features
284
+
285
+ - offer only tool-valid reasoning-effort levels in wade init (#371) (cb6458a)
286
+
287
+ ## [v0.38.1] — 2026-08-04
288
+
289
+ ### Bug Fixes
290
+
291
+ - accept permission_mode key in config validation (#369) (cdeb48e)
292
+
293
+ ### Other Changes
294
+
295
+ - H2: Git &amp; remote-state hygiene — never lose work, never act on a stale read (+ retire `merge_strategy: direct`) (#362) (6e55893)
296
+ - H1: Hook-layer correctness — capability matrix + fail-closed containment (crossby 0.13) (#363) (623805f)
297
+
298
+ ## [v0.38.0] — 2026-08-03
299
+
300
+ ### Features
301
+
302
+ - add a documentation update pass to the implementation and pr-comments sessions (#361) (96b6b6d)
303
+
304
+ ### Other Changes
305
+
306
+ - E: Context budget — slim the skills, say each rule once, load reference just-in-time (#364) (670cc29)
307
+
308
+ ## [v0.37.0] — 2026-08-01
309
+
310
+ ### Features
311
+
312
+ - modernize AI-tool hook integration via crossby runtime contract (#320) (76e8ca2)
313
+
314
+ ## [v0.36.0] — 2026-07-25
315
+
316
+ ### Features
317
+
318
+ - announce headless review timeout so orchestrators don't kill it early (#347) (1af5754)
319
+
7
320
  ## [v0.35.3] — 2026-07-25
8
321
 
9
322
  ### Chores
@@ -35,14 +35,15 @@ uv pip install -e ".[dev]"
35
35
 
36
36
  ```
37
37
  CLI Layer → services, models, config, logging, ui
38
- Service Layer → providers, crossby (AI tool adapters), git, db, models, config, logging
38
+ Service Layer → providers, crossby (AI tool adapters), git, models, config, logging
39
39
  Provider Layer → models, config, logging (no service imports)
40
40
  Git Layer → models, config, logging (no service imports)
41
- DB Layer → models, logging (no config imports)
42
41
  Models Layer → nothing (leaf)
43
42
  ```
44
43
 
45
- AI tool adapters live in the external [`crossby`](https://github.com/ivanviragine/crossby) package, not this repo — see `docs/dev/architecture.md`.
44
+ Never import a higher layer from a lower one, and keep business logic out of `cli/`. One sanctioned exception runs the other way: services may import the lower `skills/` utility layer for skill-file management (`install_skills`, the `*_SKILLS` registries, gitignore/cross-tool constants), never the reverse.
45
+
46
+ AI tool adapters live in the external [`crossby`](https://github.com/ivanviragine/crossby) package, not this repo — wade's services import `crossby.ai_tools` and `crossby.models.ai` directly. See `docs/dev/architecture.md`.
46
47
 
47
48
  CLI modules are thin dispatch — parse flags with Typer, call service methods. Business logic lives in `services/`, not `cli/`.
48
49