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.
- {wade_cli-0.52.0 → wade_cli-0.53.1}/.gitignore +1 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/AGENTS.md +16 -13
- {wade_cli-0.52.0 → wade_cli-0.53.1}/CHANGELOG.md +12 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/PKG-INFO +145 -27
- {wade_cli-0.52.0 → wade_cli-0.53.1}/README.md +144 -26
- {wade_cli-0.52.0 → wade_cli-0.53.1}/docs/dev/architecture.md +134 -73
- {wade_cli-0.52.0 → wade_cli-0.53.1}/docs/dev/documentation-policies.md +6 -6
- wade_cli-0.53.1/docs/dev/skills-system.md +211 -0
- wade_cli-0.53.1/docs/dev/workflows-and-skills.md +301 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/pyproject.toml +1 -1
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test.sh +4 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/__init__.py +1 -1
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/implementation_session.py +16 -3
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/main.py +83 -2
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/review.py +47 -1
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/review_pr_comments_session.py +16 -3
- wade_cli-0.53.1/src/wade/cli/session.py +126 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/session_shared.py +37 -7
- wade_cli-0.53.1/src/wade/cli/skills.py +108 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/task.py +6 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/config/loader.py +15 -1
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/config/migrations.py +3 -2
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/repo.py +6 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/hooks/policies.py +1 -47
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/config.py +107 -11
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/hooks.py +1 -14
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/readiness.py +10 -41
- wade_cli-0.53.1/src/wade/models/session_manifest.py +264 -0
- wade_cli-0.53.1/src/wade/models/skill.py +211 -0
- wade_cli-0.53.1/src/wade/models/workflow.py +316 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/batch_review_service.py +68 -19
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/check_service.py +64 -21
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/deps_service.py +62 -8
- wade_cli-0.53.1/src/wade/services/documentation_receipt_service.py +61 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/batch.py +21 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/bootstrap.py +89 -81
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/core.py +177 -97
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/done.py +128 -24
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/lifecycle.py +14 -8
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/config_io.py +3 -2
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/plan_service.py +70 -9
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/review_delegation_service.py +318 -106
- wade_cli-0.53.1/src/wade/services/review_record_service.py +157 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/review_service.py +36 -9
- wade_cli-0.53.1/src/wade/services/session_composition_service.py +323 -0
- wade_cli-0.53.1/src/wade/services/skill_diagnostics_service.py +268 -0
- wade_cli-0.53.1/src/wade/services/skill_invocation_service.py +215 -0
- wade_cli-0.53.1/src/wade/skills/catalog.py +60 -0
- wade_cli-0.53.1/src/wade/skills/discovery.py +339 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/skills/doc_targets.py +1 -1
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/skills/installer.py +46 -147
- wade_cli-0.53.1/src/wade/skills/materializer.py +508 -0
- wade_cli-0.53.1/src/wade/skills/resolver.py +59 -0
- wade_cli-0.53.1/src/wade/skills/validation.py +187 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/markers.py +0 -63
- wade_cli-0.53.1/src/wade/utils/safe_state.py +210 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/templates.py +15 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/terminal.py +97 -1
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/agents-pointer.md +3 -2
- wade_cli-0.53.1/templates/prompts/deps-analysis.md +5 -0
- wade_cli-0.53.1/templates/prompts/implement-context.md +12 -0
- wade_cli-0.53.1/templates/prompts/plan-session.md +12 -0
- wade_cli-0.53.1/templates/prompts/review-batch.md +8 -0
- wade_cli-0.53.1/templates/prompts/review-code.md +7 -0
- wade_cli-0.53.1/templates/prompts/review-plan.md +7 -0
- wade_cli-0.53.1/templates/prompts/review-pr-comments.md +12 -0
- wade_cli-0.53.1/templates/prompts/session-start-implement.md +5 -0
- wade_cli-0.53.1/templates/prompts/session-start-plan.md +5 -0
- wade_cli-0.53.1/templates/prompts/session-start-review.md +4 -0
- wade_cli-0.53.1/templates/skills/batch-review/SKILL.md +16 -0
- wade_cli-0.53.1/templates/skills/code-review/SKILL.md +18 -0
- wade_cli-0.53.1/templates/skills/dependency-analysis/SKILL.md +16 -0
- wade_cli-0.53.1/templates/skills/implementation/SKILL.md +21 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/skills/knowledge/SKILL.md +1 -1
- wade_cli-0.53.1/templates/skills/plan-review/SKILL.md +17 -0
- wade_cli-0.53.1/templates/skills/planning/SKILL.md +22 -0
- wade_cli-0.53.1/templates/skills/review-comments/SKILL.md +18 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/skills/task/SKILL.md +3 -2
- wade_cli-0.53.1/templates/workflows/_partials/completion.md +4 -0
- wade_cli-0.53.1/templates/workflows/_partials/documentation-step.md +9 -0
- wade_cli-0.53.1/templates/workflows/_partials/interaction-policy.md +12 -0
- wade_cli-0.53.1/templates/workflows/_partials/knowledge-step.md +7 -0
- wade_cli-0.53.1/templates/workflows/_partials/review-budget.md +16 -0
- wade_cli-0.53.1/templates/workflows/implementation.md +53 -0
- wade_cli-0.53.1/templates/workflows/plan.md +43 -0
- wade_cli-0.53.1/templates/workflows/reference/documentation.md +6 -0
- wade_cli-0.53.1/templates/workflows/reference/new-plan.md +7 -0
- wade_cli-0.53.1/templates/workflows/reference/plan-output-contract.md +9 -0
- wade_cli-0.53.1/templates/workflows/reference/pr-summary-format.md +6 -0
- wade_cli-0.53.1/templates/workflows/reference/recovery.md +60 -0
- wade_cli-0.53.1/templates/workflows/reference/session-summary-format.md +6 -0
- wade_cli-0.53.1/templates/workflows/reference/tracking-issues.md +12 -0
- wade_cli-0.53.1/templates/workflows/review-pr-comments.md +48 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_implement_work_done_contract.py +158 -19
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_review_contract.py +29 -1
- wade_cli-0.53.1/tests/integration/test_dynamic_skill_sessions.py +410 -0
- wade_cli-0.53.1/tests/integration/test_skill_context_budget.py +74 -0
- wade_cli-0.53.1/tests/integration/test_skill_install.py +226 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/test_cli_basics.py +2 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_done_doc_pass_advisory.py +7 -9
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_review_cli.py +96 -40
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_session_subapps.py +16 -2
- wade_cli-0.53.1/tests/unit/test_cli/test_skills_session_cli.py +150 -0
- wade_cli-0.53.1/tests/unit/test_config/test_dynamic_skill_config.py +115 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_hooks/test_session_start.py +65 -84
- wade_cli-0.53.1/tests/unit/test_models/test_workflow_models.py +120 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_batch_review_service.py +8 -7
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_session_start.py +14 -8
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_check.py +8 -1
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_deps_service.py +78 -3
- wade_cli-0.53.1/tests/unit/test_services/test_documentation_receipt.py +110 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_done_gates.py +187 -28
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_implementation_done_sync.py +12 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_implementation_launch_context.py +148 -7
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_implementation_service.py +106 -16
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_plan_service.py +125 -2
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_review_delegation_service.py +141 -59
- wade_cli-0.53.1/tests/unit/test_services/test_review_receipts.py +223 -0
- wade_cli-0.53.1/tests/unit/test_services/test_review_records.py +270 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_review_service.py +9 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_review_status_block.py +119 -22
- wade_cli-0.53.1/tests/unit/test_services/test_skill_diagnostics_service.py +153 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_tracked_managed_files.py +29 -10
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_worktree_gitignore.py +1 -1
- wade_cli-0.53.1/tests/unit/test_skills/test_crossby_contract.py +79 -0
- wade_cli-0.53.1/tests/unit/test_skills/test_dynamic_skills.py +409 -0
- wade_cli-0.53.1/tests/unit/test_skills/test_generic_builtin_boundaries.py +19 -0
- wade_cli-0.53.1/tests/unit/test_skills/test_review_budget_partial.py +55 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_markers.py +2 -48
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_terminal_launch.py +40 -0
- wade_cli-0.52.0/docs/dev/skills-system.md +0 -259
- wade_cli-0.52.0/templates/prompts/deps-analysis.md +0 -21
- wade_cli-0.52.0/templates/prompts/implement-context.md +0 -11
- wade_cli-0.52.0/templates/prompts/plan-session.md +0 -14
- wade_cli-0.52.0/templates/prompts/review-batch.md +0 -22
- wade_cli-0.52.0/templates/prompts/review-code.md +0 -16
- wade_cli-0.52.0/templates/prompts/review-plan.md +0 -16
- wade_cli-0.52.0/templates/prompts/review-pr-comments.md +0 -19
- wade_cli-0.52.0/templates/prompts/session-start-implement.md +0 -4
- wade_cli-0.52.0/templates/prompts/session-start-plan.md +0 -3
- wade_cli-0.52.0/templates/prompts/session-start-review.md +0 -3
- wade_cli-0.52.0/templates/skills/_partials/doc-update-step.md +0 -6
- wade_cli-0.52.0/templates/skills/_partials/knowledge-step.md +0 -8
- wade_cli-0.52.0/templates/skills/_partials/review-budget.md +0 -46
- wade_cli-0.52.0/templates/skills/_partials/review-enforcement-rule.md +0 -12
- wade_cli-0.52.0/templates/skills/_partials/review-implementation-closing-step.md +0 -25
- wade_cli-0.52.0/templates/skills/_partials/review-plan-step.md +0 -18
- wade_cli-0.52.0/templates/skills/_partials/user-interaction.md +0 -33
- wade_cli-0.52.0/templates/skills/deps/SKILL.md +0 -113
- wade_cli-0.52.0/templates/skills/implementation-session/SKILL.md +0 -152
- wade_cli-0.52.0/templates/skills/implementation-session/reference/doc-update.md +0 -38
- wade_cli-0.52.0/templates/skills/implementation-session/reference/new-plan.md +0 -11
- wade_cli-0.52.0/templates/skills/implementation-session/reference/pr-summary-format.md +0 -41
- wade_cli-0.52.0/templates/skills/implementation-session/reference/recovery.md +0 -129
- wade_cli-0.52.0/templates/skills/implementation-session/reference/tracking-issues.md +0 -28
- wade_cli-0.52.0/templates/skills/plan-session/SKILL.md +0 -111
- wade_cli-0.52.0/templates/skills/plan-session/reference/plan-format.md +0 -82
- wade_cli-0.52.0/templates/skills/review-pr-comments-session/SKILL.md +0 -198
- wade_cli-0.52.0/templates/skills/review-pr-comments-session/reference/doc-update.md +0 -38
- wade_cli-0.52.0/templates/skills/review-pr-comments-session/reference/recovery.md +0 -66
- wade_cli-0.52.0/tests/integration/test_skill_context_budget.py +0 -139
- wade_cli-0.52.0/tests/integration/test_skill_install.py +0 -648
- wade_cli-0.52.0/tests/unit/test_services/test_reviewed_marker.py +0 -250
- wade_cli-0.52.0/tests/unit/test_skills/test_review_budget_partial.py +0 -65
- {wade_cli-0.52.0 → wade_cli-0.53.1}/.gitattributes +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/.github/workflows/auto-version.yml +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/.github/workflows/ci.yml +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/.github/workflows/pr-title-lint.yml +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/.github/workflows/publish.yml +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/.github/workflows/release.yml +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/.pre-commit-config.yaml +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/.wade.yml +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/CONTRIBUTING.md +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/KNOWLEDGE.md +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/KNOWLEDGE.ratings.jsonl +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/assets/wade.png +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/docker-compose.e2e.yml +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/docs/dev/extending.md +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/docs/dev/testing.md +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/install.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/auto_version.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/changelog.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/check-all.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/check.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/fmt.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/hooks/pre-push +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/install-hooks.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/release.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/setup-worktree.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-concurrency.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-e2e-docker.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-e2e.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-live-ai-taskr.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-live-ai.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/scripts/test-live-gh.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/__main__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/admin.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/autocomplete.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/deps_session.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/hook.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/knowledge.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/plan_session.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/cli/worktree.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/config/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/config/schema.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/branch.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/hooks.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/pr.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/stash.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/sync.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/git/worktree.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/hooks/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/hooks/cli.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/logging/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/logging/context.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/logging/setup.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/batch.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/delegation.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/deps.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/events.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/permission.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/review.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/session.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/task.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/models/worktree.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/_pr_delegate.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/base.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/clickup.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/github.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/markdown.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/providers/registry.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/ai_resolution.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/bot_trigger.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/delegation_service.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/_shared.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/cleanup.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/draft_pr.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/sync.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/implementation_service/usage_tracking.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/auth.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/commands.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/manifest.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/migrations.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/prompts_ai.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/prompts_setup.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/init_service/shell.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/knowledge_recovery.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/knowledge_search.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/knowledge_service.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/prompt_delivery.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/review_settle.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/smart_start.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/services/task_service.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/skills/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/skills/pointer.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/ui/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/ui/console.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/ui/prompts.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/body_markers.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/clipboard.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/conventional.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/filelock.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/gitref.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/http.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/install.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/knowledge_file.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/markdown.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/paths.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/plan_validation.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/process.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/slug.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/stale_base.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/token_usage_markdown.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/src/wade/utils/update_check.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/hooks/commit-msg +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/hooks/pre-commit +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/hooks/pre-push +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/setup-worktree.sh.example +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/skills/task/examples.md +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/skills/task/plan-format.md +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/skills/task/reference/session-summary-format.md +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/templates/statusline-command.sh +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/concurrency/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/concurrency/test_batch_multi_pr.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/concurrency/test_knowledge_merge.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/concurrency/test_lock_retry.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/concurrency/test_stash_race.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/conftest.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/_support.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/conftest.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/mock_gh_script.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_admin_contract.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_check_contract.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_knowledge_contract.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_mock_gh_contract.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_plan_contract.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_smart_start_contract.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_task_contract.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/e2e/test_work_sync_list_contract.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/transcripts/claude_session.txt +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/transcripts/codex_session.txt +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/transcripts/copilot_session.txt +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/fixtures/transcripts/generic_session.txt +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_autostash.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_check.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_git.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_implementation_lifecycle.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_init.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_knowledge.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/integration/test_markdown_provider.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/live/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/live/test_wade_live_ai.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/live/test_wade_live_ai_taskr.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/live/test_wade_live_gh.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/conftest.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_done_review_hint.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_shell_init.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_task_cli.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_cli/test_work_cli.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/test_bot_review_config.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/test_loader.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/test_migrations.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_config/test_migrations_atomic.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_console.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_effort.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_all_patches_present.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_branch_list.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_branch_slugify.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_detached_worktree.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_is_merged_into.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_main_checkout_root.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_merge_count.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_pr_base.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_pr_lookup.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_pr_retry.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_pr_title.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_repo.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_reset_branch.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_scaffold_commit.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_stash_drop.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_git/test_worktree_remove.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_hooks/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_hooks/test_hook_cli.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_hooks/test_policies.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_batch.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_config_models.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_delegation.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_deps_models.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_deps_partition.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_review.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_review_expectation.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_models/test_task_models.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_permission_mode.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_providers/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_providers/test_clickup.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_providers/test_github.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_providers/test_github_pr.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_providers/test_markdown.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_ai_resolution.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_batch_pr_index.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_allowlist.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_bot_trigger.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_catchup.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_delegation_service.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_done_idempotent.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_done_plan_flag.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_init.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_init_shell_integration.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_knowledge_search.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_knowledge_service.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_no_direct_git.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_pr_summary_path.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_preserve_session_data.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_prompt_delivery.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_push_recovery.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_resume_autonomy.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_smart_start.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_smart_start_resume.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_stale_base_surface.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_sync_base_branch.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_services/test_task_service.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_skills/test_doc_targets.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_skills/test_pointer.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/__init__.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_body_markers.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_conventional.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_filelock.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_gitref.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_http.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_install.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_markdown.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_plan_validation.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_process.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_prompts.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_slug.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_stale_base.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_terminal.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_utils/test_update_check.py +0 -0
- {wade_cli-0.52.0 → wade_cli-0.53.1}/tests/unit/test_yolo.py +0 -0
|
@@ -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
|
-
| **
|
|
19
|
-
| **
|
|
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
|
|
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/
|
|
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**.
|
|
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 (
|
|
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
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
517
|
-
|
|
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.
|
|
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 (
|
|
529
|
-
|
|
|
530
|
-
|
|
|
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
|
|
545
|
-
(`done.require_review: false` /
|
|
546
|
-
completed at the
|
|
547
|
-
|
|
548
|
-
|
|
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
|
-
|
|
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
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
481
|
-
|
|
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.
|
|
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 (
|
|
493
|
-
|
|
|
494
|
-
|
|
|
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
|
|
509
|
-
(`done.require_review: false` /
|
|
510
|
-
completed at the
|
|
511
|
-
|
|
512
|
-
|
|
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
|
-
|
|
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
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
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
|
|