wade-cli 0.52.0__tar.gz → 0.53.1__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 (445) hide show
  1. {wade_cli-0.52.0 → wade_cli-0.53.1}/.gitignore +1 -0
  2. {wade_cli-0.52.0 → wade_cli-0.53.1}/AGENTS.md +16 -13
  3. {wade_cli-0.52.0 → wade_cli-0.53.1}/CHANGELOG.md +12 -0
  4. {wade_cli-0.52.0 → wade_cli-0.53.1}/PKG-INFO +145 -27
  5. {wade_cli-0.52.0 → wade_cli-0.53.1}/README.md +144 -26
  6. {wade_cli-0.52.0 → wade_cli-0.53.1}/docs/dev/architecture.md +134 -73
  7. {wade_cli-0.52.0 → wade_cli-0.53.1}/docs/dev/documentation-policies.md +6 -6
  8. wade_cli-0.53.1/docs/dev/skills-system.md +211 -0
  9. wade_cli-0.53.1/docs/dev/workflows-and-skills.md +301 -0
  10. {wade_cli-0.52.0 → wade_cli-0.53.1}/pyproject.toml +1 -1
  11. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test.sh +4 -0
  12. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/__init__.py +1 -1
  13. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/implementation_session.py +16 -3
  14. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/main.py +83 -2
  15. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/review.py +47 -1
  16. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/review_pr_comments_session.py +16 -3
  17. wade_cli-0.53.1/src/wade/cli/session.py +126 -0
  18. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/session_shared.py +37 -7
  19. wade_cli-0.53.1/src/wade/cli/skills.py +108 -0
  20. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/task.py +6 -0
  21. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/config/loader.py +15 -1
  22. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/config/migrations.py +3 -2
  23. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/repo.py +6 -0
  24. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/hooks/policies.py +1 -47
  25. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/config.py +107 -11
  26. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/hooks.py +1 -14
  27. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/readiness.py +10 -41
  28. wade_cli-0.53.1/src/wade/models/session_manifest.py +264 -0
  29. wade_cli-0.53.1/src/wade/models/skill.py +211 -0
  30. wade_cli-0.53.1/src/wade/models/workflow.py +316 -0
  31. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/batch_review_service.py +68 -19
  32. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/check_service.py +64 -21
  33. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/deps_service.py +62 -8
  34. wade_cli-0.53.1/src/wade/services/documentation_receipt_service.py +61 -0
  35. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/batch.py +21 -0
  36. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/bootstrap.py +89 -81
  37. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/core.py +177 -97
  38. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/done.py +128 -24
  39. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/lifecycle.py +14 -8
  40. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/config_io.py +3 -2
  41. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/plan_service.py +70 -9
  42. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/review_delegation_service.py +318 -106
  43. wade_cli-0.53.1/src/wade/services/review_record_service.py +157 -0
  44. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/review_service.py +36 -9
  45. wade_cli-0.53.1/src/wade/services/session_composition_service.py +323 -0
  46. wade_cli-0.53.1/src/wade/services/skill_diagnostics_service.py +268 -0
  47. wade_cli-0.53.1/src/wade/services/skill_invocation_service.py +215 -0
  48. wade_cli-0.53.1/src/wade/skills/catalog.py +60 -0
  49. wade_cli-0.53.1/src/wade/skills/discovery.py +339 -0
  50. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/skills/doc_targets.py +1 -1
  51. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/skills/installer.py +46 -147
  52. wade_cli-0.53.1/src/wade/skills/materializer.py +508 -0
  53. wade_cli-0.53.1/src/wade/skills/resolver.py +59 -0
  54. wade_cli-0.53.1/src/wade/skills/validation.py +187 -0
  55. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/markers.py +0 -63
  56. wade_cli-0.53.1/src/wade/utils/safe_state.py +210 -0
  57. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/templates.py +15 -0
  58. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/terminal.py +97 -1
  59. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/agents-pointer.md +3 -2
  60. wade_cli-0.53.1/templates/prompts/deps-analysis.md +5 -0
  61. wade_cli-0.53.1/templates/prompts/implement-context.md +12 -0
  62. wade_cli-0.53.1/templates/prompts/plan-session.md +12 -0
  63. wade_cli-0.53.1/templates/prompts/review-batch.md +8 -0
  64. wade_cli-0.53.1/templates/prompts/review-code.md +7 -0
  65. wade_cli-0.53.1/templates/prompts/review-plan.md +7 -0
  66. wade_cli-0.53.1/templates/prompts/review-pr-comments.md +12 -0
  67. wade_cli-0.53.1/templates/prompts/session-start-implement.md +5 -0
  68. wade_cli-0.53.1/templates/prompts/session-start-plan.md +5 -0
  69. wade_cli-0.53.1/templates/prompts/session-start-review.md +4 -0
  70. wade_cli-0.53.1/templates/skills/batch-review/SKILL.md +16 -0
  71. wade_cli-0.53.1/templates/skills/code-review/SKILL.md +18 -0
  72. wade_cli-0.53.1/templates/skills/dependency-analysis/SKILL.md +16 -0
  73. wade_cli-0.53.1/templates/skills/implementation/SKILL.md +21 -0
  74. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/skills/knowledge/SKILL.md +1 -1
  75. wade_cli-0.53.1/templates/skills/plan-review/SKILL.md +17 -0
  76. wade_cli-0.53.1/templates/skills/planning/SKILL.md +22 -0
  77. wade_cli-0.53.1/templates/skills/review-comments/SKILL.md +18 -0
  78. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/skills/task/SKILL.md +3 -2
  79. wade_cli-0.53.1/templates/workflows/_partials/completion.md +4 -0
  80. wade_cli-0.53.1/templates/workflows/_partials/documentation-step.md +9 -0
  81. wade_cli-0.53.1/templates/workflows/_partials/interaction-policy.md +12 -0
  82. wade_cli-0.53.1/templates/workflows/_partials/knowledge-step.md +7 -0
  83. wade_cli-0.53.1/templates/workflows/_partials/review-budget.md +16 -0
  84. wade_cli-0.53.1/templates/workflows/implementation.md +53 -0
  85. wade_cli-0.53.1/templates/workflows/plan.md +43 -0
  86. wade_cli-0.53.1/templates/workflows/reference/documentation.md +6 -0
  87. wade_cli-0.53.1/templates/workflows/reference/new-plan.md +7 -0
  88. wade_cli-0.53.1/templates/workflows/reference/plan-output-contract.md +9 -0
  89. wade_cli-0.53.1/templates/workflows/reference/pr-summary-format.md +6 -0
  90. wade_cli-0.53.1/templates/workflows/reference/recovery.md +60 -0
  91. wade_cli-0.53.1/templates/workflows/reference/session-summary-format.md +6 -0
  92. wade_cli-0.53.1/templates/workflows/reference/tracking-issues.md +12 -0
  93. wade_cli-0.53.1/templates/workflows/review-pr-comments.md +48 -0
  94. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_implement_work_done_contract.py +158 -19
  95. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_review_contract.py +29 -1
  96. wade_cli-0.53.1/tests/integration/test_dynamic_skill_sessions.py +410 -0
  97. wade_cli-0.53.1/tests/integration/test_skill_context_budget.py +74 -0
  98. wade_cli-0.53.1/tests/integration/test_skill_install.py +226 -0
  99. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/test_cli_basics.py +2 -0
  100. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_done_doc_pass_advisory.py +7 -9
  101. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_review_cli.py +96 -40
  102. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_session_subapps.py +16 -2
  103. wade_cli-0.53.1/tests/unit/test_cli/test_skills_session_cli.py +150 -0
  104. wade_cli-0.53.1/tests/unit/test_config/test_dynamic_skill_config.py +115 -0
  105. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_hooks/test_session_start.py +65 -84
  106. wade_cli-0.53.1/tests/unit/test_models/test_workflow_models.py +120 -0
  107. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_batch_review_service.py +8 -7
  108. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_session_start.py +14 -8
  109. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_check.py +8 -1
  110. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_deps_service.py +78 -3
  111. wade_cli-0.53.1/tests/unit/test_services/test_documentation_receipt.py +110 -0
  112. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_done_gates.py +187 -28
  113. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_implementation_done_sync.py +12 -0
  114. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_implementation_launch_context.py +148 -7
  115. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_implementation_service.py +106 -16
  116. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_plan_service.py +125 -2
  117. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_review_delegation_service.py +141 -59
  118. wade_cli-0.53.1/tests/unit/test_services/test_review_receipts.py +223 -0
  119. wade_cli-0.53.1/tests/unit/test_services/test_review_records.py +270 -0
  120. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_review_service.py +9 -0
  121. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_review_status_block.py +119 -22
  122. wade_cli-0.53.1/tests/unit/test_services/test_skill_diagnostics_service.py +153 -0
  123. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_tracked_managed_files.py +29 -10
  124. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_worktree_gitignore.py +1 -1
  125. wade_cli-0.53.1/tests/unit/test_skills/test_crossby_contract.py +79 -0
  126. wade_cli-0.53.1/tests/unit/test_skills/test_dynamic_skills.py +409 -0
  127. wade_cli-0.53.1/tests/unit/test_skills/test_generic_builtin_boundaries.py +19 -0
  128. wade_cli-0.53.1/tests/unit/test_skills/test_review_budget_partial.py +55 -0
  129. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_markers.py +2 -48
  130. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_terminal_launch.py +40 -0
  131. wade_cli-0.52.0/docs/dev/skills-system.md +0 -259
  132. wade_cli-0.52.0/templates/prompts/deps-analysis.md +0 -21
  133. wade_cli-0.52.0/templates/prompts/implement-context.md +0 -11
  134. wade_cli-0.52.0/templates/prompts/plan-session.md +0 -14
  135. wade_cli-0.52.0/templates/prompts/review-batch.md +0 -22
  136. wade_cli-0.52.0/templates/prompts/review-code.md +0 -16
  137. wade_cli-0.52.0/templates/prompts/review-plan.md +0 -16
  138. wade_cli-0.52.0/templates/prompts/review-pr-comments.md +0 -19
  139. wade_cli-0.52.0/templates/prompts/session-start-implement.md +0 -4
  140. wade_cli-0.52.0/templates/prompts/session-start-plan.md +0 -3
  141. wade_cli-0.52.0/templates/prompts/session-start-review.md +0 -3
  142. wade_cli-0.52.0/templates/skills/_partials/doc-update-step.md +0 -6
  143. wade_cli-0.52.0/templates/skills/_partials/knowledge-step.md +0 -8
  144. wade_cli-0.52.0/templates/skills/_partials/review-budget.md +0 -46
  145. wade_cli-0.52.0/templates/skills/_partials/review-enforcement-rule.md +0 -12
  146. wade_cli-0.52.0/templates/skills/_partials/review-implementation-closing-step.md +0 -25
  147. wade_cli-0.52.0/templates/skills/_partials/review-plan-step.md +0 -18
  148. wade_cli-0.52.0/templates/skills/_partials/user-interaction.md +0 -33
  149. wade_cli-0.52.0/templates/skills/deps/SKILL.md +0 -113
  150. wade_cli-0.52.0/templates/skills/implementation-session/SKILL.md +0 -152
  151. wade_cli-0.52.0/templates/skills/implementation-session/reference/doc-update.md +0 -38
  152. wade_cli-0.52.0/templates/skills/implementation-session/reference/new-plan.md +0 -11
  153. wade_cli-0.52.0/templates/skills/implementation-session/reference/pr-summary-format.md +0 -41
  154. wade_cli-0.52.0/templates/skills/implementation-session/reference/recovery.md +0 -129
  155. wade_cli-0.52.0/templates/skills/implementation-session/reference/tracking-issues.md +0 -28
  156. wade_cli-0.52.0/templates/skills/plan-session/SKILL.md +0 -111
  157. wade_cli-0.52.0/templates/skills/plan-session/reference/plan-format.md +0 -82
  158. wade_cli-0.52.0/templates/skills/review-pr-comments-session/SKILL.md +0 -198
  159. wade_cli-0.52.0/templates/skills/review-pr-comments-session/reference/doc-update.md +0 -38
  160. wade_cli-0.52.0/templates/skills/review-pr-comments-session/reference/recovery.md +0 -66
  161. wade_cli-0.52.0/tests/integration/test_skill_context_budget.py +0 -139
  162. wade_cli-0.52.0/tests/integration/test_skill_install.py +0 -648
  163. wade_cli-0.52.0/tests/unit/test_services/test_reviewed_marker.py +0 -250
  164. wade_cli-0.52.0/tests/unit/test_skills/test_review_budget_partial.py +0 -65
  165. {wade_cli-0.52.0 → wade_cli-0.53.1}/.gitattributes +0 -0
  166. {wade_cli-0.52.0 → wade_cli-0.53.1}/.github/workflows/auto-version.yml +0 -0
  167. {wade_cli-0.52.0 → wade_cli-0.53.1}/.github/workflows/ci.yml +0 -0
  168. {wade_cli-0.52.0 → wade_cli-0.53.1}/.github/workflows/pr-title-lint.yml +0 -0
  169. {wade_cli-0.52.0 → wade_cli-0.53.1}/.github/workflows/publish.yml +0 -0
  170. {wade_cli-0.52.0 → wade_cli-0.53.1}/.github/workflows/release.yml +0 -0
  171. {wade_cli-0.52.0 → wade_cli-0.53.1}/.pre-commit-config.yaml +0 -0
  172. {wade_cli-0.52.0 → wade_cli-0.53.1}/.wade.yml +0 -0
  173. {wade_cli-0.52.0 → wade_cli-0.53.1}/CONTRIBUTING.md +0 -0
  174. {wade_cli-0.52.0 → wade_cli-0.53.1}/KNOWLEDGE.md +0 -0
  175. {wade_cli-0.52.0 → wade_cli-0.53.1}/KNOWLEDGE.ratings.jsonl +0 -0
  176. {wade_cli-0.52.0 → wade_cli-0.53.1}/assets/wade.png +0 -0
  177. {wade_cli-0.52.0 → wade_cli-0.53.1}/docker-compose.e2e.yml +0 -0
  178. {wade_cli-0.52.0 → wade_cli-0.53.1}/docs/dev/extending.md +0 -0
  179. {wade_cli-0.52.0 → wade_cli-0.53.1}/docs/dev/testing.md +0 -0
  180. {wade_cli-0.52.0 → wade_cli-0.53.1}/install.sh +0 -0
  181. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/auto_version.py +0 -0
  182. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/changelog.py +0 -0
  183. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/check-all.sh +0 -0
  184. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/check.sh +0 -0
  185. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/fmt.sh +0 -0
  186. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/hooks/pre-push +0 -0
  187. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/install-hooks.sh +0 -0
  188. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/release.sh +0 -0
  189. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/setup-worktree.sh +0 -0
  190. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-concurrency.sh +0 -0
  191. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-e2e-docker.sh +0 -0
  192. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-e2e.sh +0 -0
  193. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-live-ai-taskr.sh +0 -0
  194. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-live-ai.sh +0 -0
  195. {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-live-gh.sh +0 -0
  196. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/__main__.py +0 -0
  197. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/__init__.py +0 -0
  198. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/admin.py +0 -0
  199. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/autocomplete.py +0 -0
  200. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/deps_session.py +0 -0
  201. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/hook.py +0 -0
  202. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/knowledge.py +0 -0
  203. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/plan_session.py +0 -0
  204. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/worktree.py +0 -0
  205. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/config/__init__.py +0 -0
  206. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/config/schema.py +0 -0
  207. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/__init__.py +0 -0
  208. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/branch.py +0 -0
  209. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/hooks.py +0 -0
  210. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/pr.py +0 -0
  211. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/stash.py +0 -0
  212. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/sync.py +0 -0
  213. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/worktree.py +0 -0
  214. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/hooks/__init__.py +0 -0
  215. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/hooks/cli.py +0 -0
  216. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/logging/__init__.py +0 -0
  217. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/logging/context.py +0 -0
  218. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/logging/setup.py +0 -0
  219. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/__init__.py +0 -0
  220. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/batch.py +0 -0
  221. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/delegation.py +0 -0
  222. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/deps.py +0 -0
  223. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/events.py +0 -0
  224. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/permission.py +0 -0
  225. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/review.py +0 -0
  226. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/session.py +0 -0
  227. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/task.py +0 -0
  228. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/worktree.py +0 -0
  229. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/__init__.py +0 -0
  230. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/_pr_delegate.py +0 -0
  231. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/base.py +0 -0
  232. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/clickup.py +0 -0
  233. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/github.py +0 -0
  234. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/markdown.py +0 -0
  235. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/registry.py +0 -0
  236. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/__init__.py +0 -0
  237. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/ai_resolution.py +0 -0
  238. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/bot_trigger.py +0 -0
  239. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/delegation_service.py +0 -0
  240. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/__init__.py +0 -0
  241. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/_shared.py +0 -0
  242. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/cleanup.py +0 -0
  243. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/draft_pr.py +0 -0
  244. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/sync.py +0 -0
  245. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/usage_tracking.py +0 -0
  246. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/__init__.py +0 -0
  247. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/auth.py +0 -0
  248. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/commands.py +0 -0
  249. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/manifest.py +0 -0
  250. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/migrations.py +0 -0
  251. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/prompts_ai.py +0 -0
  252. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/prompts_setup.py +0 -0
  253. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/shell.py +0 -0
  254. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/knowledge_recovery.py +0 -0
  255. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/knowledge_search.py +0 -0
  256. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/knowledge_service.py +0 -0
  257. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/prompt_delivery.py +0 -0
  258. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/review_settle.py +0 -0
  259. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/smart_start.py +0 -0
  260. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/task_service.py +0 -0
  261. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/skills/__init__.py +0 -0
  262. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/skills/pointer.py +0 -0
  263. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/ui/__init__.py +0 -0
  264. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/ui/console.py +0 -0
  265. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/ui/prompts.py +0 -0
  266. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/__init__.py +0 -0
  267. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/body_markers.py +0 -0
  268. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/clipboard.py +0 -0
  269. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/conventional.py +0 -0
  270. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/filelock.py +0 -0
  271. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/gitref.py +0 -0
  272. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/http.py +0 -0
  273. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/install.py +0 -0
  274. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/knowledge_file.py +0 -0
  275. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/markdown.py +0 -0
  276. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/paths.py +0 -0
  277. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/plan_validation.py +0 -0
  278. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/process.py +0 -0
  279. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/slug.py +0 -0
  280. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/stale_base.py +0 -0
  281. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/token_usage_markdown.py +0 -0
  282. {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/update_check.py +0 -0
  283. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/hooks/commit-msg +0 -0
  284. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/hooks/pre-commit +0 -0
  285. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/hooks/pre-push +0 -0
  286. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/setup-worktree.sh.example +0 -0
  287. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/skills/task/examples.md +0 -0
  288. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/skills/task/plan-format.md +0 -0
  289. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/skills/task/reference/session-summary-format.md +0 -0
  290. {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/statusline-command.sh +0 -0
  291. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/__init__.py +0 -0
  292. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/concurrency/__init__.py +0 -0
  293. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/concurrency/test_batch_multi_pr.py +0 -0
  294. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/concurrency/test_knowledge_merge.py +0 -0
  295. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/concurrency/test_lock_retry.py +0 -0
  296. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/concurrency/test_stash_race.py +0 -0
  297. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/conftest.py +0 -0
  298. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/__init__.py +0 -0
  299. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/_support.py +0 -0
  300. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/conftest.py +0 -0
  301. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/mock_gh_script.py +0 -0
  302. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_admin_contract.py +0 -0
  303. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_check_contract.py +0 -0
  304. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_knowledge_contract.py +0 -0
  305. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_mock_gh_contract.py +0 -0
  306. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_plan_contract.py +0 -0
  307. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_smart_start_contract.py +0 -0
  308. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_task_contract.py +0 -0
  309. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_work_sync_list_contract.py +0 -0
  310. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
  311. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
  312. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/transcripts/claude_session.txt +0 -0
  313. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/transcripts/codex_session.txt +0 -0
  314. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  315. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/transcripts/generic_session.txt +0 -0
  316. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/__init__.py +0 -0
  317. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_autostash.py +0 -0
  318. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_check.py +0 -0
  319. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_git.py +0 -0
  320. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_implementation_lifecycle.py +0 -0
  321. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_init.py +0 -0
  322. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_knowledge.py +0 -0
  323. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_markdown_provider.py +0 -0
  324. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/live/__init__.py +0 -0
  325. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/live/test_wade_live_ai.py +0 -0
  326. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/live/test_wade_live_ai_taskr.py +0 -0
  327. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/live/test_wade_live_gh.py +0 -0
  328. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/__init__.py +0 -0
  329. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/conftest.py +0 -0
  330. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/__init__.py +0 -0
  331. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_done_review_hint.py +0 -0
  332. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
  333. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_shell_init.py +0 -0
  334. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_task_cli.py +0 -0
  335. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
  336. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_work_cli.py +0 -0
  337. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/__init__.py +0 -0
  338. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/test_bot_review_config.py +0 -0
  339. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/test_loader.py +0 -0
  340. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
  341. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/test_migrations.py +0 -0
  342. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  343. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_console.py +0 -0
  344. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_effort.py +0 -0
  345. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/__init__.py +0 -0
  346. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_all_patches_present.py +0 -0
  347. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_branch_list.py +0 -0
  348. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_branch_slugify.py +0 -0
  349. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_detached_worktree.py +0 -0
  350. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_is_merged_into.py +0 -0
  351. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_main_checkout_root.py +0 -0
  352. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_merge_count.py +0 -0
  353. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_pr_base.py +0 -0
  354. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_pr_lookup.py +0 -0
  355. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_pr_retry.py +0 -0
  356. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_pr_title.py +0 -0
  357. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_repo.py +0 -0
  358. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_reset_branch.py +0 -0
  359. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  360. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_stash_drop.py +0 -0
  361. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  362. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
  363. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_worktree_remove.py +0 -0
  364. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_hooks/__init__.py +0 -0
  365. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_hooks/test_hook_cli.py +0 -0
  366. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_hooks/test_policies.py +0 -0
  367. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
  368. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/__init__.py +0 -0
  369. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_batch.py +0 -0
  370. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_config_models.py +0 -0
  371. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_delegation.py +0 -0
  372. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_deps_models.py +0 -0
  373. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_deps_partition.py +0 -0
  374. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_review.py +0 -0
  375. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_review_expectation.py +0 -0
  376. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_task_models.py +0 -0
  377. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_permission_mode.py +0 -0
  378. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_providers/__init__.py +0 -0
  379. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_providers/test_clickup.py +0 -0
  380. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_providers/test_github.py +0 -0
  381. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_providers/test_github_pr.py +0 -0
  382. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_providers/test_markdown.py +0 -0
  383. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/__init__.py +0 -0
  384. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_ai_resolution.py +0 -0
  385. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
  386. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_batch_pr_index.py +0 -0
  387. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_allowlist.py +0 -0
  388. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
  389. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
  390. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
  391. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
  392. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bot_trigger.py +0 -0
  393. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_catchup.py +0 -0
  394. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
  395. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
  396. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
  397. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_delegation_service.py +0 -0
  398. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_done_idempotent.py +0 -0
  399. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_done_plan_flag.py +0 -0
  400. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
  401. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
  402. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
  403. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
  404. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_init.py +0 -0
  405. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  406. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
  407. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_knowledge_search.py +0 -0
  408. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_knowledge_service.py +0 -0
  409. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
  410. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_no_direct_git.py +0 -0
  411. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
  412. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
  413. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
  414. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_pr_summary_path.py +0 -0
  415. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
  416. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_preserve_session_data.py +0 -0
  417. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_prompt_delivery.py +0 -0
  418. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_push_recovery.py +0 -0
  419. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
  420. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_resume_autonomy.py +0 -0
  421. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_smart_start.py +0 -0
  422. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_smart_start_resume.py +0 -0
  423. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_stale_base_surface.py +0 -0
  424. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_sync_base_branch.py +0 -0
  425. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_task_service.py +0 -0
  426. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_skills/test_doc_targets.py +0 -0
  427. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
  428. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
  429. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_skills/test_pointer.py +0 -0
  430. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/__init__.py +0 -0
  431. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_body_markers.py +0 -0
  432. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_conventional.py +0 -0
  433. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_filelock.py +0 -0
  434. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_gitref.py +0 -0
  435. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_http.py +0 -0
  436. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_install.py +0 -0
  437. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_markdown.py +0 -0
  438. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_plan_validation.py +0 -0
  439. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_process.py +0 -0
  440. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_prompts.py +0 -0
  441. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_slug.py +0 -0
  442. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_stale_base.py +0 -0
  443. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_terminal.py +0 -0
  444. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_update_check.py +0 -0
  445. {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_yolo.py +0 -0
@@ -37,6 +37,7 @@ htmlcov/
37
37
  .wade/
38
38
  CLAUDE.md
39
39
  PLAN.md
40
+ !templates/workflows/plan.md
40
41
  PR-SUMMARY.md
41
42
 
42
43
  # OS
@@ -15,13 +15,15 @@ Two distinct worlds interact in this codebase. Always be clear which one you are
15
15
  |------|---------|
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
- | **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/` **per session by worktree bootstrap** (`bootstrap_worktree`), not by `wade init` |
18
+ | **workflow templates** | Fixed WADE lifecycle files in `templates/workflows/`; rendered to `.wade/session/WORKFLOW.md` and never replaceable by skill configuration |
19
+ | **methodology skill templates** | WADE-agnostic replaceable methods in `templates/skills/` (planning, implementation, review, and dependency analysis) |
20
+ | **session skill snapshots** | Immutable copies of active and available skills under `.wade/session/skills/`, including project skills discovered from the worktree and main checkout |
21
+ | **support skills** | Fixed WADE command-support skills projected into `.claude/skills/` per worktree bootstrap; they are not replaceable methodology |
20
22
  | **AGENTS.md pointer** | A short `## Git Workflow` block that **worktree bootstrap** injects into an inited project's `AGENTS.md` per session, not by `wade init` |
21
23
 
22
24
  **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
25
 
24
- **WADE uses its own workflow.** This repo is itself an inited project. Follow the `## Git Workflow` pointer at the bottom and the phase-specific skill referenced in your clipboard prompt.
26
+ **WADE uses its own workflow.** This repo is itself an inited project. Follow the `## Git Workflow` pointer at the bottom, then the fixed `.wade/session/WORKFLOW.md` and its selected WORK methodology.
25
27
 
26
28
  ## Commands
27
29
 
@@ -113,13 +115,15 @@ Everything in this repo exists in one of two worlds:
113
115
  | WADE repo (source) | Inited project (output) |
114
116
  |---------------------|------------------------|
115
117
  | `src/wade/` | installed `wade` binary |
116
- | `templates/skills/<name>/SKILL.md` | `.claude/skills/<name>/SKILL.md` |
118
+ | `templates/workflows/<session>.md` | `.wade/session/WORKFLOW.md` |
119
+ | `templates/skills/<method>/SKILL.md` | `.wade/session/skills/{builtin,project}/.../SKILL.md` |
120
+ | support skills in `templates/skills/` | `.claude/skills/<name>/SKILL.md` |
117
121
  | `templates/agents-pointer.md` | `## Git Workflow` block in target `AGENTS.md` |
118
122
  | `AGENTS.md` (this file) | target project's own `AGENTS.md` |
119
123
 
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).
124
+ When developing WADE, **only touch the left column**. Put lifecycle steps and WADE commands in `templates/workflows/`; put replaceable methodology in WADE-agnostic `templates/skills/<method>/SKILL.md`. Never edit `.claude/skills/` or `.wade/session/` outputs directly.
121
125
 
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.
126
+ The right-column artifacts (workflow, frozen skill bundle, support skills, the `## Git Workflow` pointer, and tool configuration) are produced **per session by worktree bootstrap** (`bootstrap_worktree` in `implementation_service/bootstrap.py`, invoked by `wade implement`/`wade plan`/`wade review`; standalone delegations use operation bundles), *not* by `wade init`. `wade init` writes only `.wade.yml`, optional provider/knowledge files, and the `.wade/` manifest.
123
127
 
124
128
  > Skills system deep dive (symlinks, pointer markers, installation lifecycle): see `docs/dev/skills-system.md`
125
129
 
@@ -151,12 +155,10 @@ Before considering any work complete:
151
155
  - [ ] **`templates/skills/`** — updated if agent-facing rules changed (plan-session for planning, implementation-session for implementation, review-pr-comments-session for reviews)
152
156
  - [ ] **Commit** — uses conventional-commit prefix
153
157
 
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.
158
+ Note: for inited projects, the doc update pass is an explicit mandatory step in
159
+ the fixed implementation and PR-comment workflows. WADE records an `--updated`
160
+ or reasoned `--not-needed` receipt for the current commit; methodology skills do
161
+ not own or satisfy that step. This repo's own checklist above is unaffected.
160
162
 
161
163
  > Full 10-item checklist, documentation rules, feedback loop, and correction-driven docs: see `docs/dev/documentation-policies.md`
162
164
 
@@ -169,5 +171,6 @@ Read these on-demand when working in a specific area:
169
171
  | Modifying architecture, config, or commands | `docs/dev/architecture.md` |
170
172
  | Adding an AI tool, provider, or subcommand | `docs/dev/extending.md` |
171
173
  | Writing or running tests | `docs/dev/testing.md` |
172
- | Working on skills, pointer system, or `wade init` | `docs/dev/skills-system.md` |
174
+ | Working on discovery, snapshots, support skills, pointer system, or `wade init` | `docs/dev/skills-system.md` |
175
+ | Working on fixed workflows, dynamic bindings, manifests, or delegation skill contracts | `docs/dev/workflows-and-skills.md` |
173
176
  | Updating documentation policies | `docs/dev/documentation-policies.md` |
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Conventional Commits](https://conventionalcommits.org/).
6
6
 
7
+ ## [v0.53.1] — 2026-08-31
8
+
9
+ ### Bug Fixes
10
+
11
+ - relaunch Codex with implementation network policy after plan handoff (#473) (202018b)
12
+
13
+ ## [v0.53.0] — 2026-08-31
14
+
15
+ ### Features
16
+
17
+ - decouple session workflows from dynamic skills (#470) (3f588a4)
18
+
7
19
  ## [v0.52.0] — 2026-08-23
8
20
 
9
21
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: wade-cli
3
- Version: 0.52.0
3
+ Version: 0.53.1
4
4
  Summary: WADE — Workflow for AI-Driven Engineering
5
5
  Project-URL: Homepage, https://github.com/ivanviragine/wade
6
6
  Project-URL: Repository, https://github.com/ivanviragine/wade
@@ -61,7 +61,8 @@ while WADE handles the git and GitHub plumbing around every AI session.
61
61
  project conventions are loaded into the AI automatically.
62
62
  - **Agent guardrails** — on hook-capable AI tools, per-session hooks keep the AI
63
63
  inside its worktree and route it through a completion gate before any push;
64
- hookless tools fall back to skill rules (see the tool support table).
64
+ hookless tools retain the same fixed workflow and deterministic service gates
65
+ (see the tool support table).
65
66
  - **Quality gates** — opt-in pre-commit lint/test and conventional-commit checks,
66
67
  plus an AI code-review pass before the PR is marked ready.
67
68
  - **Pluggable task providers** — GitHub Issues, ClickUp, or a committed Markdown
@@ -90,8 +91,8 @@ wade 42
90
91
 
91
92
  With no open PR for task #42 yet, WADE starts an implementation session: it
92
93
  creates an isolated git worktree, launches your AI tool with the full task
93
- loaded — title, description, labels, and all your project conventions — and
94
- Skills guide the AI from first commit to open PR without you touching git again.
94
+ loaded — title, description, labels, and all your project conventions — and a
95
+ fixed workflow plus selected methodology guide it from first commit to open PR.
95
96
  Want the AI to break the work down first? Run `wade plan` — planning is a
96
97
  deliberate step, not something `wade 42` guesses at from a missing plan.
97
98
 
@@ -131,7 +132,7 @@ wade implement-batch 42 43 44 # three worktrees, three AI sessions, zero stash
131
132
  | `git fetch && checkout && pull && checkout -b ...` before every task | `wade 42` — one command, done |
132
133
  | Copy-paste task title + description into AI chat every time | Full task context + project conventions loaded automatically |
133
134
  | One task at a time, or stash-juggle between branches | Parallel tasks in isolated worktrees, zero conflicts |
134
- | Re-explain your branching rules, test commands, linters every session | Skills teach the AI your conventions once |
135
+ | Re-explain lifecycle and review rules every session | A fixed workflow carries them; dynamic skills add your methodology |
135
136
  | PRs opened on stale branches — reviewer sees conflict noise, asks for a rebase, CI fails | AI merges the latest main and resolves conflicts before the PR — reviewer sees only your changes |
136
137
  | Write the PR description, link the task, clean up the branch — manually | The AI ships the PR. You just review |
137
138
  | Manually pick the right model for each task | Automatic model routing based on task complexity |
@@ -239,6 +240,12 @@ wade plan ─▶ tasks + draft PRs ─▶ wade <N> ─▶ AI implements in an is
239
240
  | `wade update` | Upgrade WADE and refresh project files |
240
241
  | `wade deinit` | Remove WADE from the current project |
241
242
  | `wade check-config` | Validate `.wade.yml` configuration |
243
+ | `wade skills list` | List built-in methods and discovered project skills |
244
+ | `wade skills resolve --session <kind>` | Explain effective session bindings and precedence |
245
+ | `wade skills resolve --delegation <kind>` | Explain an effective standalone delegation binding |
246
+ | `wade skills check` | Deep-check discovered trees and configured skill refs |
247
+ | `wade session describe` | Show the active session's frozen workflow/bindings |
248
+ | `wade session refresh-skills` | Explicitly rediscover and replace active skill snapshots |
242
249
  | `wade knowledge add` | Append a project learning from stdin (unavailable in a plan/deps session) |
243
250
  | `wade knowledge get` | Print the current project knowledge file |
244
251
  | `wade knowledge rate` | Record an up / down / stale vote for a knowledge entry |
@@ -259,16 +266,17 @@ These are invoked by the AI during a session — you normally don't run them by
259
266
  | Command | Description |
260
267
  |---------|-------------|
261
268
  | `wade implementation-session check` | Verify the implementation session's Git, GitHub, and required local capabilities before edits |
269
+ | `wade implementation-session docs --updated \| --not-needed "reason"` | Record the required documentation-impact decision for current HEAD |
262
270
  | `wade implementation-session sync` | Sync the branch onto the base branch |
263
271
  | `wade implementation-session done` | Completion gate — runs the gates, pushes, and opens/updates the PR |
264
- | `wade review-pr-comments-session check \| sync \| done` | Same lifecycle for a review session |
272
+ | `wade review-pr-comments-session check \| docs \| sync \| done` | Same lifecycle and documentation receipt for a review session |
265
273
  | `wade review-pr-comments-session fetch <N>` | Fetch unresolved PR review comments as markdown |
266
274
  | `wade review-pr-comments-session resolve <thread>` | Mark a PR review thread as resolved on GitHub |
267
275
  | `wade plan-session check` | Verify detached planning capabilities before writing plan artefacts or knowledge votes |
268
276
  | `wade plan-session done <plan_dir>` | Finalize a planning session |
269
277
  | `wade deps-session check` | Verify the detached dependency-analysis runtime before writing output or staging a knowledge vote |
270
278
 
271
- Most workflow commands accept `--ai <tool>`, `--model <model>`, `--effort <level>`, `--permission-mode <tier>`, and `--yolo` to override configured defaults. `implement`, `review pr-comments`, and the `wade <N>` shorthand also accept `--network` / `--no-network` (see [Codex sandbox](#codex-sandbox--network-policy)); the shorthand forwards the flag to whichever session it routes to. `implement` additionally supports `--detach` (new terminal tab), `--cd` (print worktree path only), and `--base <branch>` (see [Planning & base branches](#planning--base-branches)).
279
+ Most workflow commands accept `--ai <tool>`, `--model <model>`, `--effort <level>`, `--permission-mode <tier>`, and `--yolo` to override configured defaults. `plan`, `implement`, and `review pr-comments` accept repeatable `--skill` and `--review-skill` methodology bindings plus `--refresh-skills` for an existing frozen session; `implement-batch` forwards the same binding request to every child session. Standalone plan/code/batch review and `task deps` accept repeatable `--skill`. `implement`, `review pr-comments`, and the `wade <N>` shorthand also accept `--network` / `--no-network` (see [Codex sandbox](#codex-sandbox--network-policy)); the shorthand forwards the flag to whichever session it routes to. `implement` additionally supports `--detach` (new terminal tab), `--cd` (print worktree path only), and `--base <branch>` (see [Planning & base branches](#planning--base-branches)).
272
280
 
273
281
  ## Planning & base branches
274
282
 
@@ -322,6 +330,13 @@ WADE splits review into an **AI review pass** you or the agent can invoke, and
322
330
  | `wade review pr-comments <N>` | Starts a session to address human/bot PR comments |
323
331
  | `wade review trigger <N>` | Posts configured bot-review trigger comments on the task's PR |
324
332
 
333
+ Prompt-mode implementation review prints the bounded review prompt and exits 2;
334
+ printing it does not certify that a review happened. After performing that
335
+ self-review and addressing its findings, run
336
+ `wade review implementation --ack-self-review` to write the current commit and
337
+ frozen-review-binding receipt. Successful headless or interactive reviews write
338
+ the same receipt directly.
339
+
325
340
  To fetch the unresolved comments themselves during a review session, the agent
326
341
  runs `wade review-pr-comments-session fetch <N>`; it resolves individual threads with
327
342
  `wade review-pr-comments-session resolve`.
@@ -513,21 +528,24 @@ deliberate obfuscation (variable indirection, command substitution, subshells).
513
528
  | Antigravity CLI | ✅ | ✅ |
514
529
 
515
530
  The remaining supported tools (OpenCode, VS Code, Antigravity IDE) expose no hook
516
- mechanism WADE can install into, so they receive neither guard — session rules
517
- there rest on the skill files alone.
531
+ mechanism WADE can install into, so they receive neither hook guard. Their
532
+ session still loads the fixed workflow, and deterministic lifecycle commands and
533
+ completion gates remain authoritative.
518
534
 
519
535
  ### Completion gates
520
536
 
521
537
  `wade implementation-session done` (and `review-pr-comments-session done`) is the
522
538
  authoritative completion gate: it refuses to finalize until the work is actually
523
- ready, then writes the `.wade/done@<HEAD>` marker and pushes. Each gate has an
524
- escape hatch under a `done:` block in `.wade.yml` (all default on):
539
+ ready, then writes the `.wade/done@<HEAD>` marker and pushes. Policy gates normally
540
+ have an escape hatch under a `done:` block in `.wade.yml` (all default on).
541
+ Decision and integrity gates deliberately require an explicit valid outcome:
525
542
 
526
543
  | Gate | Refuses when… | Hatch |
527
544
  |------|---------------|-------|
528
- | PR-SUMMARY | `PR-SUMMARY.md` is missing, empty, or still a template placeholder (implementation only) | `done.require_pr_summary: false` |
529
- | Sync | the branch is behind main — auto-syncs first, refuses only on conflict (implementation only) | `done.require_sync: false` |
530
- | Review ran | `wade review implementation` did not run for the current commit. **Implementation sessions bound this loop:** after `done.max_review_passes` (default 2) review→fix→re-review cycles, `done` completes anyway with a notice instead of looping forever | `--skip-review`, `done.require_review: false` (auto-off when `ai.review_implementation.enabled: false`) |
545
+ | PR-SUMMARY | `PR-SUMMARY.md` is missing, empty, or still a template placeholder (both change-producing session types) | `done.require_pr_summary: false` |
546
+ | Documentation decision | neither an `--updated` nor reasoned `--not-needed` receipt exists for current HEAD | *no disable toggle; `docs --not-needed "<reason>"` records the explicit no-change outcome* |
547
+ | Sync | the branch is behind main — auto-syncs first, refuses only on conflict (both change-producing session types) | `done.require_sync: false` |
548
+ | Review ran | `wade review implementation` has no successful external-review or explicitly acknowledged self-review record for the current commit **and frozen REVIEW binding**, or the frozen workflow/skill bundle no longer matches its manifest. Bundle validation happens before receipts or pass counts are trusted. Prompt emission alone never satisfies this gate. **Implementation sessions bound this loop:** after `done.max_review_passes` (default 2) review→fix→re-review cycles for the active reviewer, `done` completes anyway with a notice instead of looping forever | `--skip-review`, `done.require_review: false` (auto-off when `ai.review_implementation.enabled: false`) |
531
549
  | Resolved threads | unresolved PR review threads remain (review-comments only) | `done.require_resolved_threads: false` |
532
550
  | Conventional title | the task title is not a conventional-commit title (the PR title is derived from it, so it would fail `PR Title Lint`) — blocks; when valid but the open PR's title differs, syncs the PR title to match (both session types) — if that sync fails while the PR's current title is itself non-conventional (lint would fail), `done` fails so it can be retried | `done.require_conventional_title: false` |
533
551
  | Knowledge valid | the knowledge file is structurally corrupt — duplicate entry IDs or unresolved conflict markers (e.g. from a `merge=union` merge) | *none — gated by `knowledge.enabled`; no `done.*` hatch* |
@@ -541,11 +559,11 @@ bypasses the backstop in one flag — this is a quality/backstop layer that make
541
559
  the gate hard to skip, not an airtight boundary.
542
560
 
543
561
  `done` also writes a **`## Review Status`** line into the PR body recording the
544
- review outcome — reviewed at `<sha>`, skipped via `--skip-review`, gate disabled
545
- (`done.require_review: false` / `ai.review_implementation.enabled: false`), or
546
- completed at the review-pass cap — with the review-pass count. A skipped or
547
- never-run review is therefore visible to reviewers in the PR itself, not just in
548
- the worktree-local `.wade/` markers that are discarded when the session ends.
562
+ review outcome — reviewed at `<sha>`, reviewer changed, skipped via
563
+ `--skip-review`, gate disabled (`done.require_review: false` /
564
+ `ai.review_implementation.enabled: false`), or completed at the active review
565
+ binding's pass cap. A skipped, stale-reviewer, or never-run review is therefore
566
+ visible to reviewers rather than hidden in worktree state.
549
567
 
550
568
  ## Task Providers
551
569
 
@@ -712,6 +730,15 @@ flag enables it there. Precedence for the commands that honor it is
712
730
  enable network for a WADE-managed sandbox. Enabling network never disables the
713
731
  sandbox and never changes approval-policy semantics.
714
732
 
733
+ An accepted single-issue plan handoff starts implementation from a planning
734
+ session that is always network-off. When both the planning tool and resolved
735
+ implementation tool are Codex and the implementation policy resolves to enabled,
736
+ WADE starts a fresh detached Codex context with network explicitly enabled;
737
+ reusing the planner process would retain its immutable network-off sandbox. If
738
+ WADE cannot open that detached context, the handoff fails rather than reporting
739
+ an implementation session ready. Open a new host terminal and run the displayed
740
+ `wade implement <issue> --network` command to continue with the required policy.
741
+
715
742
  ### Session readiness and least-privilege remediation
716
743
 
717
744
  Every `wade` command an agent runs is a child of the AI tool. It inherits that
@@ -818,15 +845,106 @@ Adapters, model/effort resolution, and per-tool config (allowlists, hooks) are p
818
845
 
819
846
  ## Agent Skills
820
847
 
821
- wade installs Skills that teach your AI agent the workflow — task format, planning rules, implementation session rules, and dependency analysis. Skills, the `AGENTS.md` workflow pointer, and any tool-specific configuration are set up automatically for every session (when you run `wade plan`/`wade implement`/`wade review`, or a standalone `wade task deps`), for every supported tool. Nothing to configure manually.
848
+ WADE keeps the workflow fixed while letting you replace the methodology. Every
849
+ interactive session gets an authoritative `.wade/session/WORKFLOW.md`; it still
850
+ contains planning/implementation/review steps, documentation, synchronization,
851
+ and `done` regardless of which skills are selected. Agent Skills control only
852
+ *how* the WORK or REVIEW step reasons.
853
+
854
+ Default replaceable methods:
855
+
856
+ | Operation | WORK method | REVIEW method |
857
+ |---|---|---|
858
+ | planning session | `builtin:planning` | `builtin:plan-review` |
859
+ | implementation session | `builtin:implementation` | `builtin:code-review` |
860
+ | PR-comment session | `builtin:review-comments` | `builtin:code-review` |
861
+ | batch review | `builtin:batch-review` | — |
862
+ | dependency analysis | `builtin:dependency-analysis` | — |
863
+
864
+ Custom skills stay generic: they do not need to mention WADE, worktrees,
865
+ session commands, markers, review budgets, or `done`. WADE wraps their
866
+ methodology in its fixed lifecycle or bounded operation contract.
867
+
868
+ Project skills are discovered from every skill root supported by the selected
869
+ tool integration, including real or symlinked `.claude/skills`,
870
+ `.agents/skills`, `.cursor/skills`, and `.github/skills` layouts. WADE merges
871
+ the new worktree inventory with the main checkout so local-only/ignored skills
872
+ are available too, while worktree content wins for matching tracked paths.
873
+ Generated `task` and `knowledge` command-support projections are excluded from
874
+ methodology discovery, so they cannot shadow a project skill with the same name.
875
+ WADE copies the complete skill directory—`SKILL.md`, references, scripts, and
876
+ assets—into the session snapshot; source directories are never overwritten or
877
+ pruned.
878
+
879
+ Use explicit refs:
880
+
881
+ - `builtin:<name>` for a bundled default;
882
+ - `project:<name>` for a unique discovered project skill;
883
+ - `path:<repo-relative-directory>` to select one exact source when names collide.
884
+
885
+ Bindings are ordered and frozen in `.wade/session/manifest.json`. Resuming uses
886
+ the same physical copies even if config or the main checkout changes. To change
887
+ an active session, use `--refresh-skills` with the session command or run
888
+ `wade session refresh-skills`; an override without explicit refresh fails.
889
+ In a worktree-less planning fallback, session diagnostics and refresh target the
890
+ temporary bundle advertised to the agent while continuing to load config and
891
+ project skills from the checkout that launched it.
892
+
893
+ Example configuration (all sections are optional; omitted values keep the
894
+ defaults):
895
+
896
+ ```yaml
897
+ skills:
898
+ project:
899
+ discover: true
900
+ include: ["*"]
901
+ exclude: []
902
+
903
+ sessions:
904
+ implementation:
905
+ skills:
906
+ work: [project:django-implementation]
907
+ review: [project:security-review]
908
+ plan:
909
+ skills:
910
+ work: [builtin:planning]
911
+ review_pr_comments:
912
+ skills:
913
+ work: [builtin:review-comments]
914
+
915
+ delegations:
916
+ code_review:
917
+ skills:
918
+ work: [project:security-review]
919
+ plan_review:
920
+ skills:
921
+ work: [builtin:plan-review]
922
+ batch_review:
923
+ skills:
924
+ work: [builtin:batch-review]
925
+ dependency_analysis:
926
+ skills:
927
+ work: [builtin:dependency-analysis]
928
+ ```
822
929
 
823
- | Skill | Purpose |
824
- |-------|---------|
825
- | `task` | Task creation and plan format |
826
- | `plan-session` | Planning session rules and workflow |
827
- | `implementation-session` | Implementation session rules and workflow |
828
- | `review-pr-comments-session` | Review session rules and workflow |
829
- | `deps` | Dependency analysis between tasks |
930
+ For a new session the order is CLI override, session binding, mapped delegation
931
+ binding for REVIEW, then built-in default. A session REVIEW binding wins over a
932
+ different `delegations.code_review`/`plan_review` value for that session.
933
+ Standalone review, batch, and dependency operations use their delegation
934
+ binding. `wade skills resolve` prints every candidate and the winner.
935
+
936
+ Tool-native roots receive only fixed command-support skills. Session lifecycle
937
+ comes from the rendered workflow, while default or custom methodology is frozen
938
+ inside the session bundle. Deprecated phase skills are not installed.
939
+ Resume revalidates workflow identity and the complete physical bundle against
940
+ its manifest digest; completion does the same before trusting a review receipt.
941
+ Stale metadata and edited, missing, extra, or unsafe snapshot content require an
942
+ explicit `--refresh-skills` or `wade session refresh-skills` replacement.
943
+
944
+ This redesign is a clean cutover. It does not import pre-redesign phase-skill or
945
+ review-marker state. Resuming an older in-flight worktree creates the current
946
+ session bundle, and its current commit must complete the new review and
947
+ documentation-decision gates before `done` can accept it.
830
948
 
831
949
  ### Session communication
832
950
 
@@ -25,7 +25,8 @@ while WADE handles the git and GitHub plumbing around every AI session.
25
25
  project conventions are loaded into the AI automatically.
26
26
  - **Agent guardrails** — on hook-capable AI tools, per-session hooks keep the AI
27
27
  inside its worktree and route it through a completion gate before any push;
28
- hookless tools fall back to skill rules (see the tool support table).
28
+ hookless tools retain the same fixed workflow and deterministic service gates
29
+ (see the tool support table).
29
30
  - **Quality gates** — opt-in pre-commit lint/test and conventional-commit checks,
30
31
  plus an AI code-review pass before the PR is marked ready.
31
32
  - **Pluggable task providers** — GitHub Issues, ClickUp, or a committed Markdown
@@ -54,8 +55,8 @@ wade 42
54
55
 
55
56
  With no open PR for task #42 yet, WADE starts an implementation session: it
56
57
  creates an isolated git worktree, launches your AI tool with the full task
57
- loaded — title, description, labels, and all your project conventions — and
58
- Skills guide the AI from first commit to open PR without you touching git again.
58
+ loaded — title, description, labels, and all your project conventions — and a
59
+ fixed workflow plus selected methodology guide it from first commit to open PR.
59
60
  Want the AI to break the work down first? Run `wade plan` — planning is a
60
61
  deliberate step, not something `wade 42` guesses at from a missing plan.
61
62
 
@@ -95,7 +96,7 @@ wade implement-batch 42 43 44 # three worktrees, three AI sessions, zero stash
95
96
  | `git fetch && checkout && pull && checkout -b ...` before every task | `wade 42` — one command, done |
96
97
  | Copy-paste task title + description into AI chat every time | Full task context + project conventions loaded automatically |
97
98
  | One task at a time, or stash-juggle between branches | Parallel tasks in isolated worktrees, zero conflicts |
98
- | Re-explain your branching rules, test commands, linters every session | Skills teach the AI your conventions once |
99
+ | Re-explain lifecycle and review rules every session | A fixed workflow carries them; dynamic skills add your methodology |
99
100
  | PRs opened on stale branches — reviewer sees conflict noise, asks for a rebase, CI fails | AI merges the latest main and resolves conflicts before the PR — reviewer sees only your changes |
100
101
  | Write the PR description, link the task, clean up the branch — manually | The AI ships the PR. You just review |
101
102
  | Manually pick the right model for each task | Automatic model routing based on task complexity |
@@ -203,6 +204,12 @@ wade plan ─▶ tasks + draft PRs ─▶ wade <N> ─▶ AI implements in an is
203
204
  | `wade update` | Upgrade WADE and refresh project files |
204
205
  | `wade deinit` | Remove WADE from the current project |
205
206
  | `wade check-config` | Validate `.wade.yml` configuration |
207
+ | `wade skills list` | List built-in methods and discovered project skills |
208
+ | `wade skills resolve --session <kind>` | Explain effective session bindings and precedence |
209
+ | `wade skills resolve --delegation <kind>` | Explain an effective standalone delegation binding |
210
+ | `wade skills check` | Deep-check discovered trees and configured skill refs |
211
+ | `wade session describe` | Show the active session's frozen workflow/bindings |
212
+ | `wade session refresh-skills` | Explicitly rediscover and replace active skill snapshots |
206
213
  | `wade knowledge add` | Append a project learning from stdin (unavailable in a plan/deps session) |
207
214
  | `wade knowledge get` | Print the current project knowledge file |
208
215
  | `wade knowledge rate` | Record an up / down / stale vote for a knowledge entry |
@@ -223,16 +230,17 @@ These are invoked by the AI during a session — you normally don't run them by
223
230
  | Command | Description |
224
231
  |---------|-------------|
225
232
  | `wade implementation-session check` | Verify the implementation session's Git, GitHub, and required local capabilities before edits |
233
+ | `wade implementation-session docs --updated \| --not-needed "reason"` | Record the required documentation-impact decision for current HEAD |
226
234
  | `wade implementation-session sync` | Sync the branch onto the base branch |
227
235
  | `wade implementation-session done` | Completion gate — runs the gates, pushes, and opens/updates the PR |
228
- | `wade review-pr-comments-session check \| sync \| done` | Same lifecycle for a review session |
236
+ | `wade review-pr-comments-session check \| docs \| sync \| done` | Same lifecycle and documentation receipt for a review session |
229
237
  | `wade review-pr-comments-session fetch <N>` | Fetch unresolved PR review comments as markdown |
230
238
  | `wade review-pr-comments-session resolve <thread>` | Mark a PR review thread as resolved on GitHub |
231
239
  | `wade plan-session check` | Verify detached planning capabilities before writing plan artefacts or knowledge votes |
232
240
  | `wade plan-session done <plan_dir>` | Finalize a planning session |
233
241
  | `wade deps-session check` | Verify the detached dependency-analysis runtime before writing output or staging a knowledge vote |
234
242
 
235
- Most workflow commands accept `--ai <tool>`, `--model <model>`, `--effort <level>`, `--permission-mode <tier>`, and `--yolo` to override configured defaults. `implement`, `review pr-comments`, and the `wade <N>` shorthand also accept `--network` / `--no-network` (see [Codex sandbox](#codex-sandbox--network-policy)); the shorthand forwards the flag to whichever session it routes to. `implement` additionally supports `--detach` (new terminal tab), `--cd` (print worktree path only), and `--base <branch>` (see [Planning & base branches](#planning--base-branches)).
243
+ Most workflow commands accept `--ai <tool>`, `--model <model>`, `--effort <level>`, `--permission-mode <tier>`, and `--yolo` to override configured defaults. `plan`, `implement`, and `review pr-comments` accept repeatable `--skill` and `--review-skill` methodology bindings plus `--refresh-skills` for an existing frozen session; `implement-batch` forwards the same binding request to every child session. Standalone plan/code/batch review and `task deps` accept repeatable `--skill`. `implement`, `review pr-comments`, and the `wade <N>` shorthand also accept `--network` / `--no-network` (see [Codex sandbox](#codex-sandbox--network-policy)); the shorthand forwards the flag to whichever session it routes to. `implement` additionally supports `--detach` (new terminal tab), `--cd` (print worktree path only), and `--base <branch>` (see [Planning & base branches](#planning--base-branches)).
236
244
 
237
245
  ## Planning & base branches
238
246
 
@@ -286,6 +294,13 @@ WADE splits review into an **AI review pass** you or the agent can invoke, and
286
294
  | `wade review pr-comments <N>` | Starts a session to address human/bot PR comments |
287
295
  | `wade review trigger <N>` | Posts configured bot-review trigger comments on the task's PR |
288
296
 
297
+ Prompt-mode implementation review prints the bounded review prompt and exits 2;
298
+ printing it does not certify that a review happened. After performing that
299
+ self-review and addressing its findings, run
300
+ `wade review implementation --ack-self-review` to write the current commit and
301
+ frozen-review-binding receipt. Successful headless or interactive reviews write
302
+ the same receipt directly.
303
+
289
304
  To fetch the unresolved comments themselves during a review session, the agent
290
305
  runs `wade review-pr-comments-session fetch <N>`; it resolves individual threads with
291
306
  `wade review-pr-comments-session resolve`.
@@ -477,21 +492,24 @@ deliberate obfuscation (variable indirection, command substitution, subshells).
477
492
  | Antigravity CLI | ✅ | ✅ |
478
493
 
479
494
  The remaining supported tools (OpenCode, VS Code, Antigravity IDE) expose no hook
480
- mechanism WADE can install into, so they receive neither guard — session rules
481
- there rest on the skill files alone.
495
+ mechanism WADE can install into, so they receive neither hook guard. Their
496
+ session still loads the fixed workflow, and deterministic lifecycle commands and
497
+ completion gates remain authoritative.
482
498
 
483
499
  ### Completion gates
484
500
 
485
501
  `wade implementation-session done` (and `review-pr-comments-session done`) is the
486
502
  authoritative completion gate: it refuses to finalize until the work is actually
487
- ready, then writes the `.wade/done@<HEAD>` marker and pushes. Each gate has an
488
- escape hatch under a `done:` block in `.wade.yml` (all default on):
503
+ ready, then writes the `.wade/done@<HEAD>` marker and pushes. Policy gates normally
504
+ have an escape hatch under a `done:` block in `.wade.yml` (all default on).
505
+ Decision and integrity gates deliberately require an explicit valid outcome:
489
506
 
490
507
  | Gate | Refuses when… | Hatch |
491
508
  |------|---------------|-------|
492
- | PR-SUMMARY | `PR-SUMMARY.md` is missing, empty, or still a template placeholder (implementation only) | `done.require_pr_summary: false` |
493
- | Sync | the branch is behind main — auto-syncs first, refuses only on conflict (implementation only) | `done.require_sync: false` |
494
- | Review ran | `wade review implementation` did not run for the current commit. **Implementation sessions bound this loop:** after `done.max_review_passes` (default 2) review→fix→re-review cycles, `done` completes anyway with a notice instead of looping forever | `--skip-review`, `done.require_review: false` (auto-off when `ai.review_implementation.enabled: false`) |
509
+ | PR-SUMMARY | `PR-SUMMARY.md` is missing, empty, or still a template placeholder (both change-producing session types) | `done.require_pr_summary: false` |
510
+ | Documentation decision | neither an `--updated` nor reasoned `--not-needed` receipt exists for current HEAD | *no disable toggle; `docs --not-needed "<reason>"` records the explicit no-change outcome* |
511
+ | Sync | the branch is behind main — auto-syncs first, refuses only on conflict (both change-producing session types) | `done.require_sync: false` |
512
+ | Review ran | `wade review implementation` has no successful external-review or explicitly acknowledged self-review record for the current commit **and frozen REVIEW binding**, or the frozen workflow/skill bundle no longer matches its manifest. Bundle validation happens before receipts or pass counts are trusted. Prompt emission alone never satisfies this gate. **Implementation sessions bound this loop:** after `done.max_review_passes` (default 2) review→fix→re-review cycles for the active reviewer, `done` completes anyway with a notice instead of looping forever | `--skip-review`, `done.require_review: false` (auto-off when `ai.review_implementation.enabled: false`) |
495
513
  | Resolved threads | unresolved PR review threads remain (review-comments only) | `done.require_resolved_threads: false` |
496
514
  | Conventional title | the task title is not a conventional-commit title (the PR title is derived from it, so it would fail `PR Title Lint`) — blocks; when valid but the open PR's title differs, syncs the PR title to match (both session types) — if that sync fails while the PR's current title is itself non-conventional (lint would fail), `done` fails so it can be retried | `done.require_conventional_title: false` |
497
515
  | Knowledge valid | the knowledge file is structurally corrupt — duplicate entry IDs or unresolved conflict markers (e.g. from a `merge=union` merge) | *none — gated by `knowledge.enabled`; no `done.*` hatch* |
@@ -505,11 +523,11 @@ bypasses the backstop in one flag — this is a quality/backstop layer that make
505
523
  the gate hard to skip, not an airtight boundary.
506
524
 
507
525
  `done` also writes a **`## Review Status`** line into the PR body recording the
508
- review outcome — reviewed at `<sha>`, skipped via `--skip-review`, gate disabled
509
- (`done.require_review: false` / `ai.review_implementation.enabled: false`), or
510
- completed at the review-pass cap — with the review-pass count. A skipped or
511
- never-run review is therefore visible to reviewers in the PR itself, not just in
512
- the worktree-local `.wade/` markers that are discarded when the session ends.
526
+ review outcome — reviewed at `<sha>`, reviewer changed, skipped via
527
+ `--skip-review`, gate disabled (`done.require_review: false` /
528
+ `ai.review_implementation.enabled: false`), or completed at the active review
529
+ binding's pass cap. A skipped, stale-reviewer, or never-run review is therefore
530
+ visible to reviewers rather than hidden in worktree state.
513
531
 
514
532
  ## Task Providers
515
533
 
@@ -676,6 +694,15 @@ flag enables it there. Precedence for the commands that honor it is
676
694
  enable network for a WADE-managed sandbox. Enabling network never disables the
677
695
  sandbox and never changes approval-policy semantics.
678
696
 
697
+ An accepted single-issue plan handoff starts implementation from a planning
698
+ session that is always network-off. When both the planning tool and resolved
699
+ implementation tool are Codex and the implementation policy resolves to enabled,
700
+ WADE starts a fresh detached Codex context with network explicitly enabled;
701
+ reusing the planner process would retain its immutable network-off sandbox. If
702
+ WADE cannot open that detached context, the handoff fails rather than reporting
703
+ an implementation session ready. Open a new host terminal and run the displayed
704
+ `wade implement <issue> --network` command to continue with the required policy.
705
+
679
706
  ### Session readiness and least-privilege remediation
680
707
 
681
708
  Every `wade` command an agent runs is a child of the AI tool. It inherits that
@@ -782,15 +809,106 @@ Adapters, model/effort resolution, and per-tool config (allowlists, hooks) are p
782
809
 
783
810
  ## Agent Skills
784
811
 
785
- wade installs Skills that teach your AI agent the workflow — task format, planning rules, implementation session rules, and dependency analysis. Skills, the `AGENTS.md` workflow pointer, and any tool-specific configuration are set up automatically for every session (when you run `wade plan`/`wade implement`/`wade review`, or a standalone `wade task deps`), for every supported tool. Nothing to configure manually.
812
+ WADE keeps the workflow fixed while letting you replace the methodology. Every
813
+ interactive session gets an authoritative `.wade/session/WORKFLOW.md`; it still
814
+ contains planning/implementation/review steps, documentation, synchronization,
815
+ and `done` regardless of which skills are selected. Agent Skills control only
816
+ *how* the WORK or REVIEW step reasons.
817
+
818
+ Default replaceable methods:
819
+
820
+ | Operation | WORK method | REVIEW method |
821
+ |---|---|---|
822
+ | planning session | `builtin:planning` | `builtin:plan-review` |
823
+ | implementation session | `builtin:implementation` | `builtin:code-review` |
824
+ | PR-comment session | `builtin:review-comments` | `builtin:code-review` |
825
+ | batch review | `builtin:batch-review` | — |
826
+ | dependency analysis | `builtin:dependency-analysis` | — |
827
+
828
+ Custom skills stay generic: they do not need to mention WADE, worktrees,
829
+ session commands, markers, review budgets, or `done`. WADE wraps their
830
+ methodology in its fixed lifecycle or bounded operation contract.
831
+
832
+ Project skills are discovered from every skill root supported by the selected
833
+ tool integration, including real or symlinked `.claude/skills`,
834
+ `.agents/skills`, `.cursor/skills`, and `.github/skills` layouts. WADE merges
835
+ the new worktree inventory with the main checkout so local-only/ignored skills
836
+ are available too, while worktree content wins for matching tracked paths.
837
+ Generated `task` and `knowledge` command-support projections are excluded from
838
+ methodology discovery, so they cannot shadow a project skill with the same name.
839
+ WADE copies the complete skill directory—`SKILL.md`, references, scripts, and
840
+ assets—into the session snapshot; source directories are never overwritten or
841
+ pruned.
842
+
843
+ Use explicit refs:
844
+
845
+ - `builtin:<name>` for a bundled default;
846
+ - `project:<name>` for a unique discovered project skill;
847
+ - `path:<repo-relative-directory>` to select one exact source when names collide.
848
+
849
+ Bindings are ordered and frozen in `.wade/session/manifest.json`. Resuming uses
850
+ the same physical copies even if config or the main checkout changes. To change
851
+ an active session, use `--refresh-skills` with the session command or run
852
+ `wade session refresh-skills`; an override without explicit refresh fails.
853
+ In a worktree-less planning fallback, session diagnostics and refresh target the
854
+ temporary bundle advertised to the agent while continuing to load config and
855
+ project skills from the checkout that launched it.
856
+
857
+ Example configuration (all sections are optional; omitted values keep the
858
+ defaults):
859
+
860
+ ```yaml
861
+ skills:
862
+ project:
863
+ discover: true
864
+ include: ["*"]
865
+ exclude: []
866
+
867
+ sessions:
868
+ implementation:
869
+ skills:
870
+ work: [project:django-implementation]
871
+ review: [project:security-review]
872
+ plan:
873
+ skills:
874
+ work: [builtin:planning]
875
+ review_pr_comments:
876
+ skills:
877
+ work: [builtin:review-comments]
878
+
879
+ delegations:
880
+ code_review:
881
+ skills:
882
+ work: [project:security-review]
883
+ plan_review:
884
+ skills:
885
+ work: [builtin:plan-review]
886
+ batch_review:
887
+ skills:
888
+ work: [builtin:batch-review]
889
+ dependency_analysis:
890
+ skills:
891
+ work: [builtin:dependency-analysis]
892
+ ```
786
893
 
787
- | Skill | Purpose |
788
- |-------|---------|
789
- | `task` | Task creation and plan format |
790
- | `plan-session` | Planning session rules and workflow |
791
- | `implementation-session` | Implementation session rules and workflow |
792
- | `review-pr-comments-session` | Review session rules and workflow |
793
- | `deps` | Dependency analysis between tasks |
894
+ For a new session the order is CLI override, session binding, mapped delegation
895
+ binding for REVIEW, then built-in default. A session REVIEW binding wins over a
896
+ different `delegations.code_review`/`plan_review` value for that session.
897
+ Standalone review, batch, and dependency operations use their delegation
898
+ binding. `wade skills resolve` prints every candidate and the winner.
899
+
900
+ Tool-native roots receive only fixed command-support skills. Session lifecycle
901
+ comes from the rendered workflow, while default or custom methodology is frozen
902
+ inside the session bundle. Deprecated phase skills are not installed.
903
+ Resume revalidates workflow identity and the complete physical bundle against
904
+ its manifest digest; completion does the same before trusting a review receipt.
905
+ Stale metadata and edited, missing, extra, or unsafe snapshot content require an
906
+ explicit `--refresh-skills` or `wade session refresh-skills` replacement.
907
+
908
+ This redesign is a clean cutover. It does not import pre-redesign phase-skill or
909
+ review-marker state. Resuming an older in-flight worktree creates the current
910
+ session bundle, and its current commit must complete the new review and
911
+ documentation-decision gates before `done` can accept it.
794
912
 
795
913
  ### Session communication
796
914