wade-cli 1.2.2__tar.gz → 1.2.4__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-1.2.2 → wade_cli-1.2.4}/.gitignore +1 -2
- {wade_cli-1.2.2 → wade_cli-1.2.4}/AGENTS.md +8 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/CHANGELOG.md +12 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/CONTRIBUTING.md +5 -1
- {wade_cli-1.2.2 → wade_cli-1.2.4}/KNOWLEDGE.ratings.jsonl +12 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/PKG-INFO +86 -27
- {wade_cli-1.2.2 → wade_cli-1.2.4}/README.md +84 -25
- {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/architecture.md +105 -78
- wade_cli-1.2.4/docs/dev/crossby-native-planning-checkpoint.md +238 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/extending.md +18 -0
- wade_cli-1.2.4/docs/dev/native-cli-plan-verification.md +56 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/testing.md +66 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/workflows-and-skills.md +17 -6
- {wade_cli-1.2.2 → wade_cli-1.2.4}/pyproject.toml +2 -2
- wade_cli-1.2.4/scripts/fmt.sh +7 -0
- wade_cli-1.2.4/scripts/probe_native_plan_handoff.py +118 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/__init__.py +1 -1
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/main.py +38 -4
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/plan_session.py +45 -1
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/review.py +8 -0
- wade_cli-1.2.4/src/wade/models/interactive_plan.py +35 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/permission.py +1 -1
- wade_cli-1.2.4/src/wade/models/plan_bundle.py +64 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/task.py +5 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/workflow.py +3 -3
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/ai_resolution.py +56 -11
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/bootstrap.py +3 -6
- wade_cli-1.2.4/src/wade/services/interactive_plan_service.py +276 -0
- wade_cli-1.2.4/src/wade/services/native_plan_service.py +181 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/plan_service.py +479 -284
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/review_delegation_service.py +42 -4
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/materializer.py +9 -5
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/plan_validation.py +35 -1
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/safe_state.py +28 -6
- wade_cli-1.2.4/templates/prompts/plan-session.md +20 -0
- wade_cli-1.2.4/templates/prompts/session-start-plan.md +7 -0
- wade_cli-1.2.4/templates/workflows/plan.md +65 -0
- wade_cli-1.2.4/templates/workflows/reference/plan-output-contract.md +62 -0
- wade_cli-1.2.4/tests/e2e/test_plan_contract.py +349 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_hooks/test_session_start.py +7 -3
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_permission_mode.py +22 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_ai_resolution.py +9 -1
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_allowlist.py +3 -7
- wade_cli-1.2.4/tests/unit/test_services/test_interactive_plan_service.py +210 -0
- wade_cli-1.2.4/tests/unit/test_services/test_native_plan_service.py +329 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_plan_service.py +665 -1015
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_crossby_contract.py +40 -2
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_dynamic_skills.py +8 -3
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_yolo.py +18 -27
- wade_cli-1.2.4/uv.lock +1129 -0
- wade_cli-1.2.2/scripts/fmt.sh +0 -4
- wade_cli-1.2.2/templates/prompts/plan-session.md +0 -12
- wade_cli-1.2.2/templates/prompts/session-start-plan.md +0 -5
- wade_cli-1.2.2/templates/workflows/plan.md +0 -43
- wade_cli-1.2.2/templates/workflows/reference/plan-output-contract.md +0 -9
- wade_cli-1.2.2/tests/e2e/test_plan_contract.py +0 -230
- {wade_cli-1.2.2 → wade_cli-1.2.4}/.gitattributes +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/.github/workflows/auto-version.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/.github/workflows/ci.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/.github/workflows/pr-title-lint.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/.github/workflows/publish.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/.github/workflows/release.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/.pre-commit-config.yaml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/.wade.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/KNOWLEDGE.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/assets/wade.png +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/docker-compose.e2e.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/documentation-policies.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/docs/dev/skills-system.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/install.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/auto_version.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/changelog.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/check-all.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/check.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/hooks/pre-push +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/install-hooks.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/release.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/setup-worktree.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-concurrency.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-e2e-docker.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-e2e.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-live-ai-taskr.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-live-ai.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test-live-gh.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/scripts/test.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/__main__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/admin.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/autocomplete.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/deps_session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/hook.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/implementation_session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/knowledge.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/review_pr_comments_session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/session_shared.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/skills.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/task.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/cli/worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/config/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/config/loader.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/config/migrations.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/config/schema.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/hooks.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/repo.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/stash.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/git/worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/hooks/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/hooks/cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/hooks/policies.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/logging/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/logging/context.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/logging/setup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/batch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/config.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/delegation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/deps.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/events.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/hooks.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/readiness.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/review.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/review_cycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/session_manifest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/skill.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/models/worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/_pr_delegate.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/clickup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/github.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/providers/registry.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/batch_review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/bot_trigger.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/check_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/delegation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/deps_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/documentation_receipt_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/_shared.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/batch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/cleanup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/core.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/done.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/draft_pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/lifecycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/implementation_service/usage_tracking.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/auth.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/commands.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/config_io.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/manifest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/migrations.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/prompts_ai.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/prompts_setup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/init_service/shell.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/knowledge_recovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/knowledge_search.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/knowledge_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/prompt_delivery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/review_cycle_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/review_record_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/review_settle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/session_composition_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/skill_diagnostics_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/skill_invocation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/smart_start.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/services/task_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/catalog.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/discovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/doc_targets.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/installer.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/pointer.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/resolver.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/skills/validation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/ui/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/ui/console.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/ui/prompts.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/body_markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/clipboard.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/conventional.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/filelock.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/gitref.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/http.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/install.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/knowledge_file.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/paths.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/process.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/runtime_env.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/slug.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/stale_base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/templates.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/terminal.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/token_usage_markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/src/wade/utils/update_check.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/agents-pointer.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/hooks/commit-msg +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/hooks/pre-commit +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/hooks/pre-push +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/deps-analysis.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/implement-context.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-batch.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-code.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-finding-admission.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-plan.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-pr-comments.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-batch.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-code.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-deps.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-full-branch.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-implementation.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-plan.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/review-result-pr-comments.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/session-start-implement.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/prompts/session-start-review.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/setup-worktree.sh.example +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/batch-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/code-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/dependency-analysis/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/feedback-fix-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/implementation/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/knowledge/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/plan-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/planning/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/review-comments/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/task/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/task/examples.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/task/plan-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/skills/task/reference/session-summary-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/statusline-command.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/_partials/completion.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/_partials/documentation-step.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/_partials/interaction-policy.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/_partials/knowledge-step.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/_partials/review-budget.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/implementation.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/documentation.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/new-plan.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/pr-summary-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/recovery.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/session-summary-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/reference/tracking-issues.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/templates/workflows/review-pr-comments.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/concurrency/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/concurrency/test_batch_multi_pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/concurrency/test_knowledge_merge.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/concurrency/test_lock_retry.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/concurrency/test_stash_race.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/conftest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/_support.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/conftest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/mock_gh_script.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_admin_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_check_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_implement_work_done_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_knowledge_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_mock_gh_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_review_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_smart_start_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_task_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/e2e/test_work_sync_list_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/transcripts/claude_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/transcripts/codex_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/transcripts/copilot_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/fixtures/transcripts/generic_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_autostash.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_check.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_dynamic_skill_sessions.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_git.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_implementation_lifecycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_init.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_knowledge.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_markdown_provider.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_skill_context_budget.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/integration/test_skill_install.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/live/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/live/test_wade_live_ai.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/live/test_wade_live_ai_taskr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/live/test_wade_live_gh.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/test_cli_basics.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/conftest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_autocomplete.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_done_review_hint.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_review_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_session_subapps.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_shell_init.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_skills_session_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_task_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_cli/test_work_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_bot_review_config.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_dynamic_skill_config.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_loader.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_migrations.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_config/test_migrations_atomic.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_console.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_effort.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_all_patches_present.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_branch_list.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_branch_slugify.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_detached_worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_is_merged_into.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_main_checkout_root.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_merge_count.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_pr_base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_pr_lookup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_pr_retry.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_pr_title.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_repo.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_reset_branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_scaffold_commit.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_stash_drop.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_git/test_worktree_remove.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_hooks/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_hooks/test_hook_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_hooks/test_policies.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_batch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_config_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_delegation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_deps_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_deps_partition.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_review.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_review_expectation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_task_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_models/test_workflow_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_providers/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_providers/test_clickup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_providers/test_github.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_providers/test_github_pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_providers/test_markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_scripts/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_scripts/test_changelog.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_batch_pr_index.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_batch_review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_bot_trigger.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_catchup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_check.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_delegation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_deps_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_documentation_receipt.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_done_gates.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_done_idempotent.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_done_plan_flag.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_implementation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_init.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_init_shell_integration.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_knowledge_search.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_knowledge_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_no_direct_git.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_pr_summary_path.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_preserve_session_data.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_prompt_delivery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_push_recovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_resume_autonomy.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_cycle_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_delegation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_receipts.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_records.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_review_status_block.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_skill_diagnostics_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_skill_invocation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_smart_start.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_smart_start_resume.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_stale_base_surface.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_sync_base_branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_task_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_doc_targets.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_generic_builtin_boundaries.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_pointer.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_skills/test_review_budget_partial.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_body_markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_conventional.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_filelock.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_gitref.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_http.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_install.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_plan_validation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_process.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_prompts.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_runtime_env.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_slug.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_stale_base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_terminal.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_terminal_launch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.4}/tests/unit/test_utils/test_update_check.py +0 -0
|
@@ -92,6 +92,14 @@ No circular dependencies. Models are pure data. Services orchestrate. **Never im
|
|
|
92
92
|
|
|
93
93
|
AI tool adapters are not part of this repo — they live in the external [`crossby`](https://github.com/ivanviragine/crossby) package (`pyproject.toml`). See `docs/dev/architecture.md` for what moved there.
|
|
94
94
|
|
|
95
|
+
Native planning prefers Crossby's ordinary interactive launch with native Plan
|
|
96
|
+
mode and supported approval flags. Tools without terminal Plan support (Codex)
|
|
97
|
+
retain the public collected-session/preflight API. WADE owns explicit file/stdin
|
|
98
|
+
handoff, review receipts bound to current content and frozen skills, validation,
|
|
99
|
+
knowledge handoff, and task persistence; native flags/protocols stay upstream.
|
|
100
|
+
Update the tracked `uv.lock` and Crossby contract tripwire with dependency
|
|
101
|
+
adoptions. Native plans are not transcripts; never scrape tool storage to find them.
|
|
102
|
+
|
|
95
103
|
CLI modules are thin dispatch — they parse flags via Typer, then call service methods. Business logic lives in `services/`, not in `cli/`.
|
|
96
104
|
|
|
97
105
|
> Full package structure, command dispatch, config system, and subsystem details: see `docs/dev/architecture.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
|
+
## [v1.2.4] — 2026-09-16
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
- restore native interactive planning for CLI tools (#513) (51ec787)
|
|
12
|
+
|
|
13
|
+
## [v1.2.3] — 2026-09-15
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- integrate Crossby native planning sessions (#512) (c58ea77)
|
|
18
|
+
|
|
7
19
|
## [v1.2.2] — 2026-09-09
|
|
8
20
|
|
|
9
21
|
### Bug Fixes
|
|
@@ -17,6 +17,10 @@ cd wade
|
|
|
17
17
|
uv pip install -e ".[dev]"
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
+
`uv.lock` is tracked for reproducible dependency validation. When adopting a
|
|
21
|
+
Crossby release, update the declaration, lockfile and contract tripwire together;
|
|
22
|
+
use `uv sync --all-extras` to verify the installed release without a local override.
|
|
23
|
+
|
|
20
24
|
## Running Checks
|
|
21
25
|
|
|
22
26
|
> Always use the scripts — never invoke `pytest`, `mypy`, or `ruff` directly.
|
|
@@ -28,7 +32,7 @@ uv pip install -e ".[dev]"
|
|
|
28
32
|
| `./scripts/check.sh` | Lint + type-check |
|
|
29
33
|
| `./scripts/check.sh --lint` | Lint only |
|
|
30
34
|
| `./scripts/check.sh --types` | mypy strict only |
|
|
31
|
-
| `./scripts/fmt.sh` | Auto-format
|
|
35
|
+
| `./scripts/fmt.sh [paths...]` | Auto-format selected paths (default: `src/`) |
|
|
32
36
|
| `./scripts/check-all.sh` | Full suite (tests + lint + types) |
|
|
33
37
|
|
|
34
38
|
## Architecture
|
|
@@ -178,3 +178,15 @@
|
|
|
178
178
|
{"dir": "stale", "event_id": "5fd6f7c8f26544249827eacae223694a", "id": "4d5fa933ffe6", "ts": "2026-09-08T18:20:11.796646+00:00"}
|
|
179
179
|
{"dir": "stale", "event_id": "e4417aa5f0064b3f9c7e47f3fdae4ffe", "id": "8a9bfc96", "ts": "2026-09-08T19:15:19.450727+00:00"}
|
|
180
180
|
{"dir": "stale", "event_id": "647e662229b04eb19f5a337d2c0a1d27", "id": "4d419ec6629c", "ts": "2026-09-08T19:15:19.602521+00:00"}
|
|
181
|
+
{"dir": "stale", "event_id": "d8b30c93957946b087bc118cf807859d", "id": "9f5e5e2c", "ts": "2026-09-15T12:40:24.351399+00:00"}
|
|
182
|
+
{"dir": "stale", "event_id": "23483fb102fb45a2bf60fbcb862110bd", "id": "2112b028ab73", "ts": "2026-09-15T12:40:24.525550+00:00"}
|
|
183
|
+
{"dir": "stale", "event_id": "857f1e42499144c5a2b7a7c44a277de9", "id": "c55057c13ebb", "ts": "2026-09-15T12:40:24.692975+00:00"}
|
|
184
|
+
{"dir": "up", "event_id": "79659f3434bd4bc8bf0e1dae2deae918", "id": "cb42b47b0a78", "ts": "2026-09-15T12:40:24.859865+00:00"}
|
|
185
|
+
{"dir": "up", "event_id": "d41302d8d7844cc1bf6008fb9e6b1b81", "id": "8ee8260b", "ts": "2026-09-15T12:40:25.034740+00:00"}
|
|
186
|
+
{"dir": "up", "event_id": "56ccbf428f61455292ebe28e7f6a5884", "id": "d7e3010043a2", "ts": "2026-09-15T12:40:25.199085+00:00"}
|
|
187
|
+
{"dir": "up", "event_id": "613813c3b5e24b75ab9b5296a35ada5f", "id": "9eacd93219c1", "ts": "2026-09-15T12:40:25.361743+00:00"}
|
|
188
|
+
{"dir": "up", "event_id": "d0fbb52cfa63456d81d455a83b7d0288", "id": "9f5e5e2c", "ts": "2026-09-15T15:24:18.473921+00:00"}
|
|
189
|
+
{"dir": "up", "event_id": "4cc96512911d4170b894daf7e3b8ffae", "id": "97d81e85", "ts": "2026-09-15T15:24:18.626569+00:00"}
|
|
190
|
+
{"dir": "up", "event_id": "66056751a7824f6bb780f4974e2e2d7d", "id": "b08abb58", "ts": "2026-09-15T15:24:18.781881+00:00"}
|
|
191
|
+
{"dir": "up", "event_id": "86b45a2f2bf74f0c8736e3ce9c7a7642", "id": "40a26d7cfd61", "ts": "2026-09-15T15:24:18.938217+00:00"}
|
|
192
|
+
{"dir": "stale", "event_id": "86da7ec333234953869f880b857ce682", "id": "6cd9b543", "ts": "2026-09-15T15:24:19.088735+00:00"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: wade-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.4
|
|
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
|
|
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
17
17
|
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
18
18
|
Requires-Python: >=3.11
|
|
19
|
-
Requires-Dist: crossby<0.
|
|
19
|
+
Requires-Dist: crossby<0.33.0,>=0.32.1
|
|
20
20
|
Requires-Dist: httpx<1.0,>=0.27
|
|
21
21
|
Requires-Dist: pydantic-settings>=2.0
|
|
22
22
|
Requires-Dist: pydantic>=2.0
|
|
@@ -209,8 +209,8 @@ wade plan ─▶ tasks + draft PRs ─▶ wade <N> ─▶ AI implements in an is
|
|
|
209
209
|
`wade review pr-comments <N>`, and `wade cd <N>`.
|
|
210
210
|
- **The AI runs** the session commands that enforce the workflow and open/update
|
|
211
211
|
the PR: `wade implementation-session {check,sync,done}`,
|
|
212
|
-
`wade review-pr-comments-session {check,sync,done,fetch,resolve}
|
|
213
|
-
|
|
212
|
+
`wade review-pr-comments-session {check,sync,done,fetch,resolve}`. Native
|
|
213
|
+
planning returns an artifact; the parent runs its review and validation gates.
|
|
214
214
|
|
|
215
215
|
## Commands
|
|
216
216
|
|
|
@@ -273,19 +273,71 @@ These are invoked by the AI during a session — you normally don't run them by
|
|
|
273
273
|
| `wade review-pr-comments-session fetch <N>` | Fetch unresolved PR review comments as markdown |
|
|
274
274
|
| `wade review-pr-comments-session resolve <thread>` | Mark a PR review thread as resolved on GitHub |
|
|
275
275
|
| `wade plan-session check` | Verify detached planning capabilities before writing plan artefacts or knowledge votes |
|
|
276
|
-
| `wade plan-session done <plan_dir>` |
|
|
276
|
+
| `wade plan-session done <plan_dir>` | Import an optional native plan (`--from-file` / `--from-stdin`), validate, and complete the reviewed handoff |
|
|
277
277
|
| `wade deps-session check` | Verify the detached dependency-analysis runtime before writing output or staging a knowledge vote |
|
|
278
278
|
|
|
279
279
|
Most workflow commands accept `--ai <tool>`, `--model <model>`, `--effort <level>`, `--permission-mode <tier>`, and `--yolo` to override configured defaults. `review pr-comments` additionally accepts `--effort none` to pin the tool default instead of a configured effort across a later wait/relaunch. `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`. `plan`, `implement`, `implement-batch`, standalone reviews (`review plan`, `review implementation`, `review batch`), `review pr-comments`, `task deps`, and the `wade <N>` shorthand also accept `--sandbox` / `--no-sandbox` (see [AI runtime sandbox profile](#ai-runtime-sandbox-profile)); batch and shorthand forward an explicit flag to the child session they launch. `implement` additionally supports `--detach` (new terminal tab), `--cd` (print worktree path only), and `--base <branch>` (see [Planning & base branches](#planning--base-branches)).
|
|
280
280
|
|
|
281
281
|
## Planning & base branches
|
|
282
282
|
|
|
283
|
-
`wade plan`
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
283
|
+
`wade plan` launches **Claude, Cursor, Copilot, OpenCode, and Antigravity CLI**
|
|
284
|
+
in their own interactive terminal, with **native Plan mode active before the
|
|
285
|
+
first task turn**. You keep the tool's UI, questions, and conversation. Crossby
|
|
286
|
+
validates native support and translates approval flags; WADE does not type
|
|
287
|
+
`/plan`, switch to an editing session, or replace the tool's questions.
|
|
288
|
+
|
|
289
|
+
Use `--permission-mode` (or `--yolo`) for the native approval policy:
|
|
290
|
+
|
|
291
|
+
| CLI | Supported modes while planning |
|
|
292
|
+
|-----|--------------------------------|
|
|
293
|
+
| Claude | `default`, `auto`, `yolo` |
|
|
294
|
+
| Cursor | `default`, `auto`, `yolo` |
|
|
295
|
+
| Copilot | `default`, `accept-edits`, `yolo` |
|
|
296
|
+
| OpenCode | `default`, `yolo` |
|
|
297
|
+
| Antigravity CLI | `default`, `yolo` |
|
|
298
|
+
|
|
299
|
+
Unsupported combinations fail before creating a planning worktree. These are
|
|
300
|
+
native approval settings, not permission to implement the plan. The later
|
|
301
|
+
implementation offer still requires an explicit decision.
|
|
302
|
+
|
|
303
|
+
Where the tool supports a native output-directory setting (Claude), WADE uses
|
|
304
|
+
`.wade/plans/native/`. Other tools can keep their native location. Before exit, the planning
|
|
305
|
+
workflow submits it with `wade plan-session done .wade/plans --from-file <path>`;
|
|
306
|
+
`--from-stdin` accepts explicit Markdown when no file is available. WADE writes
|
|
307
|
+
its canonical copies. `wade review plan <file>` reviews those copies inside the
|
|
308
|
+
session; prompt-mode review emits the frozen method and requires actual
|
|
309
|
+
self-review followed by `--ack-self-review`. Run `done` again after review.
|
|
310
|
+
Changed content requires a current review before completion. A missing-review
|
|
311
|
+
error on the first import means the file was imported and awaits review.
|
|
312
|
+
|
|
313
|
+
One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
|
|
314
|
+
acceptance criteria). Multiple tasks use the explicit versioned
|
|
315
|
+
[plan bundle contract](templates/workflows/reference/plan-output-contract.md),
|
|
316
|
+
with filenames and `depends_on` relationships; headings do not imply task
|
|
317
|
+
boundaries. Knowledge-enabled sessions include `knowledge_votes` in that bundle,
|
|
318
|
+
including an explicit empty list when appropriate. The parent revalidates the
|
|
319
|
+
completed handoff after exit, then creates tasks and draft PRs. Failed or missing
|
|
320
|
+
handoffs retain output and create no tasks.
|
|
321
|
+
|
|
322
|
+
**Codex keeps the collected-session path** for now: Crossby collects its native
|
|
323
|
+
plan artifact and questions, then WADE runs review and validation in the parent.
|
|
324
|
+
Its `--yolo` affects parent confirmations only; `auto` and `accept-edits` remain
|
|
325
|
+
unsupported. Codex's native session provenance is retained separately from the
|
|
326
|
+
plan; no transcript or token totals are invented from plan text.
|
|
327
|
+
|
|
328
|
+
Interactive terminals use the ordinary sandbox default (off); the Codex collector
|
|
329
|
+
keeps its safe default (on). Explicit `--sandbox`, `--network-access` /
|
|
330
|
+
`--no-network-access`, and `--trusted-dir` require support from the selected tool.
|
|
331
|
+
No network flag adds no network grant and does not promise isolation.
|
|
332
|
+
`--approval-policy on-request|untrusted|never` and `--timeout` are collector
|
|
333
|
+
settings; interactive terminals use `--permission-mode` and have no time limit.
|
|
334
|
+
Set `ai.plan.mode` to `interactive` or leave it unset for native terminals; leave
|
|
335
|
+
it unset for Codex. GUI launchers remain unsupported for planning.
|
|
336
|
+
|
|
337
|
+
Authentication, model availability, and successful handoff are runtime checks.
|
|
338
|
+
Native terminal output is retained for recovery; usage is reported only when
|
|
339
|
+
the adapter can extract it from that output. WADE's handoff ID is not a native
|
|
340
|
+
CLI session ID.
|
|
289
341
|
|
|
290
342
|
`wade plan --issue <N>` re-plans an existing task. If the session produces a
|
|
291
343
|
single plan file, it's attached to `#N` and the task stays open. If the
|
|
@@ -296,8 +348,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
|
|
|
296
348
|
`--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
|
|
297
349
|
left open with a warning instead of superseding on a partial split.
|
|
298
350
|
|
|
299
|
-
Antigravity CLI (`agy`) planning sessions launch in normal file-writing mode within a guarded git planning worktree rather than `agy`'s native `--mode plan` (which sandboxes writes to its own per-conversation artifact store outside the worktree). WADE's plan-artifact guard strictly confines writes to `.wade/plans/` and scratch paths, preserving planning safety while generating real plan files. Antigravity CLI planning therefore requires a guarded git planning worktree.
|
|
300
|
-
|
|
301
351
|
### Base branch
|
|
302
352
|
|
|
303
353
|
By default WADE branches from and merges into the project's configured main branch (`project.main_branch` in `.wade.yml`, falling back to the repo's detected default). To target a different branch — e.g. `develop` or a `release/*` branch — declare it once, at planning time, in an optional `## Base Branch` section of the plan file:
|
|
@@ -497,16 +547,17 @@ enough to pick up improvements, with no re-init or migration.
|
|
|
497
547
|
| Worktree containment | Writes that land outside your worktree |
|
|
498
548
|
| Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
|
|
499
549
|
| Session completion | Finishing an implement/review session with unfinished work not yet run through `done` (nudges once) |
|
|
500
|
-
|
|
|
550
|
+
| Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
|
|
501
551
|
|
|
502
552
|
The session-completion guard keys on the same fact `done` records — a sha-keyed
|
|
503
553
|
`.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
|
|
504
554
|
when the branch has commits ahead of its base **and** `done` has not finalized
|
|
505
555
|
the current commit. An early "stopping to ask a question" turn (no commits ahead)
|
|
506
|
-
never triggers it.
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
556
|
+
never triggers it. This Stop nudge fails **open**. Native planning does not
|
|
557
|
+
install the old file-based Stop nudge. Interactive sessions explicitly import,
|
|
558
|
+
review, and complete their plans before exit; the parent revalidates them. Codex
|
|
559
|
+
retains parent-side collection and review. Native transports may differ in hook
|
|
560
|
+
support; completion does not depend on hooks firing.
|
|
510
561
|
|
|
511
562
|
Independently of that nudge, `wade plan` now **strictly validates** plan files
|
|
512
563
|
before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
|
|
@@ -530,8 +581,8 @@ the label never fails task creation, and a body with no `## Complexity` section
|
|
|
530
581
|
just skips it. An explicit `--label complexity:X` takes precedence over the body
|
|
531
582
|
value, so the task never ends up with two conflicting complexity labels.
|
|
532
583
|
|
|
533
|
-
If some files pass and others fail,
|
|
534
|
-
|
|
584
|
+
If some files pass and others fail, a human must explicitly accept a
|
|
585
|
+
dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
|
|
535
586
|
If you decline, or if every plan file fails validation, no tasks are created —
|
|
536
587
|
the generated `PLAN*.md` are preserved to a temp directory so you can fix the
|
|
537
588
|
reported errors and re-run instead of regenerating from scratch.
|
|
@@ -652,6 +703,10 @@ Description body here. Sub-headings, code blocks, anything markdown.
|
|
|
652
703
|
|
|
653
704
|
### Permission modes
|
|
654
705
|
|
|
706
|
+
These autonomy tiers apply to ordinary launches and supported native Plan
|
|
707
|
+
terminals. Codex planning retains parent-only default/YOLO with a separate
|
|
708
|
+
collector approval policy, as described above.
|
|
709
|
+
|
|
655
710
|
`--permission-mode` sets how much autonomy the AI tool is granted — an axis
|
|
656
711
|
independent of the delegation `--mode` (which controls *how* a tool is
|
|
657
712
|
dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
|
|
@@ -661,16 +716,17 @@ dispatched: prompt/interactive/headless). The tiers, most→least permissive, ar
|
|
|
661
716
|
|------|----------|
|
|
662
717
|
| `default` | Prompt for every action (no autonomy grant). |
|
|
663
718
|
| `accept-edits` | Auto-apply file edits; still prompt for shell/commands. Claude and Antigravity CLI. |
|
|
664
|
-
| `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude
|
|
719
|
+
| `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude and Cursor. |
|
|
665
720
|
| `yolo` | Full autonomy — no prompts. |
|
|
666
721
|
|
|
667
722
|
`--yolo` is a back-compat alias for `--permission-mode yolo`; an explicit
|
|
668
723
|
`--permission-mode` wins when both are given. The same values are accepted in
|
|
669
724
|
`.wade.yml` as `ai.permission_mode` (global) or `ai.<command>.permission_mode`
|
|
670
725
|
(per-command), with `yolo: true` still honored as the alias. A tier a tool
|
|
671
|
-
doesn't support is downgraded automatically
|
|
672
|
-
|
|
673
|
-
[`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder.
|
|
726
|
+
doesn't support is downgraded automatically for ordinary launches (for example,
|
|
727
|
+
`auto` → `accept-edits` when classifier auto is unavailable), with a warning — WADE forwards the requested tier and
|
|
728
|
+
[`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder. Native Plan combinations are validated strictly and
|
|
729
|
+
rejected if unsupported.
|
|
674
730
|
**Headless launches are always read-only** — any of `deps` /
|
|
675
731
|
`review_plan` / `review_implementation` / `review_batch` dispatched in headless
|
|
676
732
|
delegation mode runs at `default` regardless of the configured tier, and no
|
|
@@ -713,6 +769,9 @@ failure feedback, and any truncation is labeled.
|
|
|
713
769
|
|
|
714
770
|
### AI runtime sandbox profile
|
|
715
771
|
|
|
772
|
+
The defaults below apply to **non-plan launches**. Native planning uses the
|
|
773
|
+
independent request policies described in [Planning & base branches](#planning--base-branches).
|
|
774
|
+
|
|
716
775
|
`ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
|
|
717
776
|
the **AI runtime** inside its own filesystem sandbox. It governs the external
|
|
718
777
|
runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
@@ -722,9 +781,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
|
722
781
|
| `sandbox: false` (**default**) | Launch the runtime unrestricted. Codex gets `--sandbox danger-full-access`, Cursor `--sandbox disabled`. Repository commands and delegated child tools keep **normal host access and credentials**. |
|
|
723
782
|
| `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
|
|
724
783
|
|
|
725
|
-
Network access is **on in both profiles** and is
|
|
726
|
-
|
|
727
|
-
|
|
784
|
+
Network access is **on in both non-plan profiles** and is not configurable for
|
|
785
|
+
ordinary launches. Not every phase needs it (dependency analysis does not),
|
|
786
|
+
but the phases that do — `git
|
|
728
787
|
fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
|
|
729
788
|
is fixed at launch.
|
|
730
789
|
|
|
@@ -173,8 +173,8 @@ wade plan ─▶ tasks + draft PRs ─▶ wade <N> ─▶ AI implements in an is
|
|
|
173
173
|
`wade review pr-comments <N>`, and `wade cd <N>`.
|
|
174
174
|
- **The AI runs** the session commands that enforce the workflow and open/update
|
|
175
175
|
the PR: `wade implementation-session {check,sync,done}`,
|
|
176
|
-
`wade review-pr-comments-session {check,sync,done,fetch,resolve}
|
|
177
|
-
|
|
176
|
+
`wade review-pr-comments-session {check,sync,done,fetch,resolve}`. Native
|
|
177
|
+
planning returns an artifact; the parent runs its review and validation gates.
|
|
178
178
|
|
|
179
179
|
## Commands
|
|
180
180
|
|
|
@@ -237,19 +237,71 @@ These are invoked by the AI during a session — you normally don't run them by
|
|
|
237
237
|
| `wade review-pr-comments-session fetch <N>` | Fetch unresolved PR review comments as markdown |
|
|
238
238
|
| `wade review-pr-comments-session resolve <thread>` | Mark a PR review thread as resolved on GitHub |
|
|
239
239
|
| `wade plan-session check` | Verify detached planning capabilities before writing plan artefacts or knowledge votes |
|
|
240
|
-
| `wade plan-session done <plan_dir>` |
|
|
240
|
+
| `wade plan-session done <plan_dir>` | Import an optional native plan (`--from-file` / `--from-stdin`), validate, and complete the reviewed handoff |
|
|
241
241
|
| `wade deps-session check` | Verify the detached dependency-analysis runtime before writing output or staging a knowledge vote |
|
|
242
242
|
|
|
243
243
|
Most workflow commands accept `--ai <tool>`, `--model <model>`, `--effort <level>`, `--permission-mode <tier>`, and `--yolo` to override configured defaults. `review pr-comments` additionally accepts `--effort none` to pin the tool default instead of a configured effort across a later wait/relaunch. `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`. `plan`, `implement`, `implement-batch`, standalone reviews (`review plan`, `review implementation`, `review batch`), `review pr-comments`, `task deps`, and the `wade <N>` shorthand also accept `--sandbox` / `--no-sandbox` (see [AI runtime sandbox profile](#ai-runtime-sandbox-profile)); batch and shorthand forward an explicit flag to the child session they launch. `implement` additionally supports `--detach` (new terminal tab), `--cd` (print worktree path only), and `--base <branch>` (see [Planning & base branches](#planning--base-branches)).
|
|
244
244
|
|
|
245
245
|
## Planning & base branches
|
|
246
246
|
|
|
247
|
-
`wade plan`
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
247
|
+
`wade plan` launches **Claude, Cursor, Copilot, OpenCode, and Antigravity CLI**
|
|
248
|
+
in their own interactive terminal, with **native Plan mode active before the
|
|
249
|
+
first task turn**. You keep the tool's UI, questions, and conversation. Crossby
|
|
250
|
+
validates native support and translates approval flags; WADE does not type
|
|
251
|
+
`/plan`, switch to an editing session, or replace the tool's questions.
|
|
252
|
+
|
|
253
|
+
Use `--permission-mode` (or `--yolo`) for the native approval policy:
|
|
254
|
+
|
|
255
|
+
| CLI | Supported modes while planning |
|
|
256
|
+
|-----|--------------------------------|
|
|
257
|
+
| Claude | `default`, `auto`, `yolo` |
|
|
258
|
+
| Cursor | `default`, `auto`, `yolo` |
|
|
259
|
+
| Copilot | `default`, `accept-edits`, `yolo` |
|
|
260
|
+
| OpenCode | `default`, `yolo` |
|
|
261
|
+
| Antigravity CLI | `default`, `yolo` |
|
|
262
|
+
|
|
263
|
+
Unsupported combinations fail before creating a planning worktree. These are
|
|
264
|
+
native approval settings, not permission to implement the plan. The later
|
|
265
|
+
implementation offer still requires an explicit decision.
|
|
266
|
+
|
|
267
|
+
Where the tool supports a native output-directory setting (Claude), WADE uses
|
|
268
|
+
`.wade/plans/native/`. Other tools can keep their native location. Before exit, the planning
|
|
269
|
+
workflow submits it with `wade plan-session done .wade/plans --from-file <path>`;
|
|
270
|
+
`--from-stdin` accepts explicit Markdown when no file is available. WADE writes
|
|
271
|
+
its canonical copies. `wade review plan <file>` reviews those copies inside the
|
|
272
|
+
session; prompt-mode review emits the frozen method and requires actual
|
|
273
|
+
self-review followed by `--ack-self-review`. Run `done` again after review.
|
|
274
|
+
Changed content requires a current review before completion. A missing-review
|
|
275
|
+
error on the first import means the file was imported and awaits review.
|
|
276
|
+
|
|
277
|
+
One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
|
|
278
|
+
acceptance criteria). Multiple tasks use the explicit versioned
|
|
279
|
+
[plan bundle contract](templates/workflows/reference/plan-output-contract.md),
|
|
280
|
+
with filenames and `depends_on` relationships; headings do not imply task
|
|
281
|
+
boundaries. Knowledge-enabled sessions include `knowledge_votes` in that bundle,
|
|
282
|
+
including an explicit empty list when appropriate. The parent revalidates the
|
|
283
|
+
completed handoff after exit, then creates tasks and draft PRs. Failed or missing
|
|
284
|
+
handoffs retain output and create no tasks.
|
|
285
|
+
|
|
286
|
+
**Codex keeps the collected-session path** for now: Crossby collects its native
|
|
287
|
+
plan artifact and questions, then WADE runs review and validation in the parent.
|
|
288
|
+
Its `--yolo` affects parent confirmations only; `auto` and `accept-edits` remain
|
|
289
|
+
unsupported. Codex's native session provenance is retained separately from the
|
|
290
|
+
plan; no transcript or token totals are invented from plan text.
|
|
291
|
+
|
|
292
|
+
Interactive terminals use the ordinary sandbox default (off); the Codex collector
|
|
293
|
+
keeps its safe default (on). Explicit `--sandbox`, `--network-access` /
|
|
294
|
+
`--no-network-access`, and `--trusted-dir` require support from the selected tool.
|
|
295
|
+
No network flag adds no network grant and does not promise isolation.
|
|
296
|
+
`--approval-policy on-request|untrusted|never` and `--timeout` are collector
|
|
297
|
+
settings; interactive terminals use `--permission-mode` and have no time limit.
|
|
298
|
+
Set `ai.plan.mode` to `interactive` or leave it unset for native terminals; leave
|
|
299
|
+
it unset for Codex. GUI launchers remain unsupported for planning.
|
|
300
|
+
|
|
301
|
+
Authentication, model availability, and successful handoff are runtime checks.
|
|
302
|
+
Native terminal output is retained for recovery; usage is reported only when
|
|
303
|
+
the adapter can extract it from that output. WADE's handoff ID is not a native
|
|
304
|
+
CLI session ID.
|
|
253
305
|
|
|
254
306
|
`wade plan --issue <N>` re-plans an existing task. If the session produces a
|
|
255
307
|
single plan file, it's attached to `#N` and the task stays open. If the
|
|
@@ -260,8 +312,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
|
|
|
260
312
|
`--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
|
|
261
313
|
left open with a warning instead of superseding on a partial split.
|
|
262
314
|
|
|
263
|
-
Antigravity CLI (`agy`) planning sessions launch in normal file-writing mode within a guarded git planning worktree rather than `agy`'s native `--mode plan` (which sandboxes writes to its own per-conversation artifact store outside the worktree). WADE's plan-artifact guard strictly confines writes to `.wade/plans/` and scratch paths, preserving planning safety while generating real plan files. Antigravity CLI planning therefore requires a guarded git planning worktree.
|
|
264
|
-
|
|
265
315
|
### Base branch
|
|
266
316
|
|
|
267
317
|
By default WADE branches from and merges into the project's configured main branch (`project.main_branch` in `.wade.yml`, falling back to the repo's detected default). To target a different branch — e.g. `develop` or a `release/*` branch — declare it once, at planning time, in an optional `## Base Branch` section of the plan file:
|
|
@@ -461,16 +511,17 @@ enough to pick up improvements, with no re-init or migration.
|
|
|
461
511
|
| Worktree containment | Writes that land outside your worktree |
|
|
462
512
|
| Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
|
|
463
513
|
| Session completion | Finishing an implement/review session with unfinished work not yet run through `done` (nudges once) |
|
|
464
|
-
|
|
|
514
|
+
| Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
|
|
465
515
|
|
|
466
516
|
The session-completion guard keys on the same fact `done` records — a sha-keyed
|
|
467
517
|
`.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
|
|
468
518
|
when the branch has commits ahead of its base **and** `done` has not finalized
|
|
469
519
|
the current commit. An early "stopping to ask a question" turn (no commits ahead)
|
|
470
|
-
never triggers it.
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
520
|
+
never triggers it. This Stop nudge fails **open**. Native planning does not
|
|
521
|
+
install the old file-based Stop nudge. Interactive sessions explicitly import,
|
|
522
|
+
review, and complete their plans before exit; the parent revalidates them. Codex
|
|
523
|
+
retains parent-side collection and review. Native transports may differ in hook
|
|
524
|
+
support; completion does not depend on hooks firing.
|
|
474
525
|
|
|
475
526
|
Independently of that nudge, `wade plan` now **strictly validates** plan files
|
|
476
527
|
before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
|
|
@@ -494,8 +545,8 @@ the label never fails task creation, and a body with no `## Complexity` section
|
|
|
494
545
|
just skips it. An explicit `--label complexity:X` takes precedence over the body
|
|
495
546
|
value, so the task never ends up with two conflicting complexity labels.
|
|
496
547
|
|
|
497
|
-
If some files pass and others fail,
|
|
498
|
-
|
|
548
|
+
If some files pass and others fail, a human must explicitly accept a
|
|
549
|
+
dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
|
|
499
550
|
If you decline, or if every plan file fails validation, no tasks are created —
|
|
500
551
|
the generated `PLAN*.md` are preserved to a temp directory so you can fix the
|
|
501
552
|
reported errors and re-run instead of regenerating from scratch.
|
|
@@ -616,6 +667,10 @@ Description body here. Sub-headings, code blocks, anything markdown.
|
|
|
616
667
|
|
|
617
668
|
### Permission modes
|
|
618
669
|
|
|
670
|
+
These autonomy tiers apply to ordinary launches and supported native Plan
|
|
671
|
+
terminals. Codex planning retains parent-only default/YOLO with a separate
|
|
672
|
+
collector approval policy, as described above.
|
|
673
|
+
|
|
619
674
|
`--permission-mode` sets how much autonomy the AI tool is granted — an axis
|
|
620
675
|
independent of the delegation `--mode` (which controls *how* a tool is
|
|
621
676
|
dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
|
|
@@ -625,16 +680,17 @@ dispatched: prompt/interactive/headless). The tiers, most→least permissive, ar
|
|
|
625
680
|
|------|----------|
|
|
626
681
|
| `default` | Prompt for every action (no autonomy grant). |
|
|
627
682
|
| `accept-edits` | Auto-apply file edits; still prompt for shell/commands. Claude and Antigravity CLI. |
|
|
628
|
-
| `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude
|
|
683
|
+
| `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude and Cursor. |
|
|
629
684
|
| `yolo` | Full autonomy — no prompts. |
|
|
630
685
|
|
|
631
686
|
`--yolo` is a back-compat alias for `--permission-mode yolo`; an explicit
|
|
632
687
|
`--permission-mode` wins when both are given. The same values are accepted in
|
|
633
688
|
`.wade.yml` as `ai.permission_mode` (global) or `ai.<command>.permission_mode`
|
|
634
689
|
(per-command), with `yolo: true` still honored as the alias. A tier a tool
|
|
635
|
-
doesn't support is downgraded automatically
|
|
636
|
-
|
|
637
|
-
[`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder.
|
|
690
|
+
doesn't support is downgraded automatically for ordinary launches (for example,
|
|
691
|
+
`auto` → `accept-edits` when classifier auto is unavailable), with a warning — WADE forwards the requested tier and
|
|
692
|
+
[`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder. Native Plan combinations are validated strictly and
|
|
693
|
+
rejected if unsupported.
|
|
638
694
|
**Headless launches are always read-only** — any of `deps` /
|
|
639
695
|
`review_plan` / `review_implementation` / `review_batch` dispatched in headless
|
|
640
696
|
delegation mode runs at `default` regardless of the configured tier, and no
|
|
@@ -677,6 +733,9 @@ failure feedback, and any truncation is labeled.
|
|
|
677
733
|
|
|
678
734
|
### AI runtime sandbox profile
|
|
679
735
|
|
|
736
|
+
The defaults below apply to **non-plan launches**. Native planning uses the
|
|
737
|
+
independent request policies described in [Planning & base branches](#planning--base-branches).
|
|
738
|
+
|
|
680
739
|
`ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
|
|
681
740
|
the **AI runtime** inside its own filesystem sandbox. It governs the external
|
|
682
741
|
runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
@@ -686,9 +745,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
|
686
745
|
| `sandbox: false` (**default**) | Launch the runtime unrestricted. Codex gets `--sandbox danger-full-access`, Cursor `--sandbox disabled`. Repository commands and delegated child tools keep **normal host access and credentials**. |
|
|
687
746
|
| `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
|
|
688
747
|
|
|
689
|
-
Network access is **on in both profiles** and is
|
|
690
|
-
|
|
691
|
-
|
|
748
|
+
Network access is **on in both non-plan profiles** and is not configurable for
|
|
749
|
+
ordinary launches. Not every phase needs it (dependency analysis does not),
|
|
750
|
+
but the phases that do — `git
|
|
692
751
|
fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
|
|
693
752
|
is fixed at launch.
|
|
694
753
|
|