wade-cli 1.2.2__tar.gz → 1.2.3__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.3}/.gitignore +1 -2
- {wade_cli-1.2.2 → wade_cli-1.2.3}/AGENTS.md +6 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/CHANGELOG.md +6 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/CONTRIBUTING.md +5 -1
- {wade_cli-1.2.2 → wade_cli-1.2.3}/KNOWLEDGE.ratings.jsonl +12 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/PKG-INFO +67 -23
- {wade_cli-1.2.2 → wade_cli-1.2.3}/README.md +65 -21
- {wade_cli-1.2.2 → wade_cli-1.2.3}/docs/dev/architecture.md +112 -78
- wade_cli-1.2.3/docs/dev/crossby-native-planning-checkpoint.md +238 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/docs/dev/extending.md +18 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/docs/dev/testing.md +36 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/docs/dev/workflows-and-skills.md +8 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/pyproject.toml +2 -2
- wade_cli-1.2.3/scripts/fmt.sh +7 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/__init__.py +1 -1
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/main.py +37 -4
- wade_cli-1.2.3/src/wade/models/plan_bundle.py +64 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/task.py +5 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/workflow.py +3 -3
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/ai_resolution.py +42 -11
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/bootstrap.py +4 -6
- wade_cli-1.2.3/src/wade/services/native_plan_service.py +181 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/plan_service.py +365 -285
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/review_delegation_service.py +3 -2
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/skills/materializer.py +7 -5
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/plan_validation.py +35 -1
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/safe_state.py +25 -0
- wade_cli-1.2.3/templates/prompts/plan-session.md +17 -0
- wade_cli-1.2.3/templates/prompts/session-start-plan.md +6 -0
- wade_cli-1.2.3/templates/workflows/plan.md +53 -0
- wade_cli-1.2.3/templates/workflows/reference/plan-output-contract.md +51 -0
- wade_cli-1.2.3/tests/e2e/test_plan_contract.py +310 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/test_skill_install.py +1 -1
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_hooks/test_session_start.py +5 -3
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_permission_mode.py +21 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_ai_resolution.py +8 -1
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_allowlist.py +3 -7
- wade_cli-1.2.3/tests/unit/test_services/test_native_plan_service.py +329 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_plan_service.py +556 -1018
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_skills/test_crossby_contract.py +40 -2
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_skills/test_dynamic_skills.py +6 -1
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_yolo.py +9 -20
- wade_cli-1.2.3/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.3}/.gitattributes +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/.github/workflows/auto-version.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/.github/workflows/ci.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/.github/workflows/pr-title-lint.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/.github/workflows/publish.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/.github/workflows/release.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/.pre-commit-config.yaml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/.wade.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/KNOWLEDGE.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/assets/wade.png +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/docker-compose.e2e.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/docs/dev/documentation-policies.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/docs/dev/skills-system.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/install.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/auto_version.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/changelog.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/check-all.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/check.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/hooks/pre-push +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/install-hooks.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/release.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/setup-worktree.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/test-concurrency.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/test-e2e-docker.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/test-e2e.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/test-live-ai-taskr.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/test-live-ai.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/test-live-gh.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/scripts/test.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/__main__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/admin.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/autocomplete.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/deps_session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/hook.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/implementation_session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/knowledge.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/plan_session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/review.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/review_pr_comments_session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/session_shared.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/skills.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/task.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/cli/worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/config/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/config/loader.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/config/migrations.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/config/schema.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/git/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/git/branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/git/hooks.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/git/pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/git/repo.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/git/stash.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/git/sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/git/worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/hooks/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/hooks/cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/hooks/policies.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/logging/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/logging/context.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/logging/setup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/batch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/config.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/delegation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/deps.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/events.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/hooks.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/permission.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/readiness.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/review.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/review_cycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/session_manifest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/skill.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/models/worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/providers/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/providers/_pr_delegate.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/providers/base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/providers/clickup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/providers/github.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/providers/markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/providers/registry.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/batch_review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/bot_trigger.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/check_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/delegation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/deps_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/documentation_receipt_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/_shared.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/batch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/cleanup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/core.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/done.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/draft_pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/lifecycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/implementation_service/usage_tracking.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/init_service/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/init_service/auth.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/init_service/commands.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/init_service/config_io.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/init_service/manifest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/init_service/migrations.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/init_service/prompts_ai.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/init_service/prompts_setup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/init_service/shell.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/knowledge_recovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/knowledge_search.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/knowledge_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/prompt_delivery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/review_cycle_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/review_record_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/review_settle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/session_composition_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/skill_diagnostics_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/skill_invocation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/smart_start.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/services/task_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/skills/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/skills/catalog.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/skills/discovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/skills/doc_targets.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/skills/installer.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/skills/pointer.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/skills/resolver.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/skills/validation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/ui/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/ui/console.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/ui/prompts.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/body_markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/clipboard.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/conventional.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/filelock.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/gitref.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/http.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/install.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/knowledge_file.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/paths.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/process.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/runtime_env.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/slug.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/stale_base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/templates.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/terminal.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/token_usage_markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/src/wade/utils/update_check.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/agents-pointer.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/hooks/commit-msg +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/hooks/pre-commit +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/hooks/pre-push +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/deps-analysis.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/implement-context.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-batch.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-code.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-finding-admission.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-plan.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-pr-comments.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-result-batch.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-result-code.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-result-deps.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-result-full-branch.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-result-implementation.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-result-plan.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/review-result-pr-comments.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/session-start-implement.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/prompts/session-start-review.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/setup-worktree.sh.example +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/batch-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/code-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/dependency-analysis/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/feedback-fix-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/implementation/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/knowledge/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/plan-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/planning/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/review-comments/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/task/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/task/examples.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/task/plan-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/skills/task/reference/session-summary-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/statusline-command.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/_partials/completion.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/_partials/documentation-step.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/_partials/interaction-policy.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/_partials/knowledge-step.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/_partials/review-budget.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/implementation.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/reference/documentation.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/reference/new-plan.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/reference/pr-summary-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/reference/recovery.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/reference/session-summary-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/reference/tracking-issues.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/templates/workflows/review-pr-comments.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/concurrency/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/concurrency/test_batch_multi_pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/concurrency/test_knowledge_merge.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/concurrency/test_lock_retry.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/concurrency/test_stash_race.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/conftest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/_support.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/conftest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/mock_gh_script.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/test_admin_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/test_check_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/test_implement_work_done_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/test_knowledge_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/test_mock_gh_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/test_review_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/test_smart_start_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/test_task_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/e2e/test_work_sync_list_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/fixtures/transcripts/claude_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/fixtures/transcripts/codex_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/fixtures/transcripts/copilot_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/fixtures/transcripts/generic_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/test_autostash.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/test_check.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/test_dynamic_skill_sessions.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/test_git.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/test_implementation_lifecycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/test_init.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/test_knowledge.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/test_markdown_provider.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/integration/test_skill_context_budget.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/live/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/live/test_wade_live_ai.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/live/test_wade_live_ai_taskr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/live/test_wade_live_gh.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/test_cli_basics.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/conftest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_autocomplete.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_done_review_hint.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_review_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_session_subapps.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_shell_init.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_skills_session_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_task_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_cli/test_work_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_config/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_config/test_bot_review_config.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_config/test_dynamic_skill_config.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_config/test_loader.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_config/test_migrations.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_config/test_migrations_atomic.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_console.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_effort.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_all_patches_present.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_branch_list.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_branch_slugify.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_detached_worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_is_merged_into.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_main_checkout_root.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_merge_count.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_pr_base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_pr_lookup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_pr_retry.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_pr_title.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_repo.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_reset_branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_scaffold_commit.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_stash_drop.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_git/test_worktree_remove.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_hooks/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_hooks/test_hook_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_hooks/test_policies.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_models/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_models/test_batch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_models/test_config_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_models/test_delegation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_models/test_deps_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_models/test_deps_partition.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_models/test_review.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_models/test_review_expectation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_models/test_task_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_models/test_workflow_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_providers/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_providers/test_clickup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_providers/test_github.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_providers/test_github_pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_providers/test_markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_scripts/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_scripts/test_changelog.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_batch_pr_index.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_batch_review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_bot_trigger.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_catchup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_check.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_delegation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_deps_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_documentation_receipt.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_done_gates.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_done_idempotent.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_done_plan_flag.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_implementation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_init.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_init_shell_integration.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_knowledge_search.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_knowledge_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_no_direct_git.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_pr_summary_path.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_preserve_session_data.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_prompt_delivery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_push_recovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_resume_autonomy.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_review_cycle_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_review_delegation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_review_receipts.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_review_records.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_review_status_block.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_skill_diagnostics_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_skill_invocation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_smart_start.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_smart_start_resume.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_stale_base_surface.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_sync_base_branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_task_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_skills/test_doc_targets.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_skills/test_generic_builtin_boundaries.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_skills/test_pointer.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_skills/test_review_budget_partial.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_body_markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_conventional.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_filelock.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_gitref.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_http.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_install.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_plan_validation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_process.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_prompts.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_runtime_env.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_slug.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_stale_base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_terminal.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_terminal_launch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.3}/tests/unit/test_utils/test_update_check.py +0 -0
|
@@ -92,6 +92,12 @@ 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 uses Crossby's public collected-session/preflight API, not the
|
|
96
|
+
ordinary launch/autonomy path. WADE owns bundle import, parent review/validation,
|
|
97
|
+
knowledge handoff and task persistence; native protocols and command-policy
|
|
98
|
+
translation stay upstream. Update the tracked `uv.lock` and Crossby contract
|
|
99
|
+
tripwire alongside a dependency adoption. Native plans are not transcripts.
|
|
100
|
+
|
|
95
101
|
CLI modules are thin dispatch — they parse flags via Typer, then call service methods. Business logic lives in `services/`, not in `cli/`.
|
|
96
102
|
|
|
97
103
|
> Full package structure, command dispatch, config system, and subsystem details: see `docs/dev/architecture.md`
|
|
@@ -4,6 +4,12 @@ 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.3] — 2026-09-15
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
- integrate Crossby native planning sessions (#512) (c58ea77)
|
|
12
|
+
|
|
7
13
|
## [v1.2.2] — 2026-09-09
|
|
8
14
|
|
|
9
15
|
### 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.3
|
|
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.0
|
|
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,58 @@ 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>` | Validate materialized plans (not native collection or task persistence) |
|
|
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` enters the selected tool's **native Plan mode before the first task
|
|
284
|
+
turn**. Crossby collects one authoritative Markdown artifact; WADE imports its
|
|
285
|
+
plans, runs the fixed review and strict validation, then creates a lightweight
|
|
286
|
+
task plus a draft PR per accepted plan. It never substitutes `/plan`, an editing
|
|
287
|
+
session, or a hook for native activation.
|
|
288
|
+
|
|
289
|
+
One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
|
|
290
|
+
acceptance criteria). Multiple tasks use the explicit versioned
|
|
291
|
+
[plan bundle contract](templates/workflows/reference/plan-output-contract.md),
|
|
292
|
+
with filenames and `depends_on` relationships; headings do not imply task
|
|
293
|
+
boundaries. Knowledge-enabled sessions also use the bundle to return ratings.
|
|
294
|
+
The parent runs the frozen plan-review method; prompt-mode review needs actual
|
|
295
|
+
self-review and explicit acknowledgement, so it cannot complete noninteractively.
|
|
296
|
+
Review failures preserve output instead of creating tasks.
|
|
297
|
+
|
|
298
|
+
Planning has independent `--sandbox` / `--no-sandbox`,
|
|
299
|
+
`--network-access` / `--no-network-access`,
|
|
300
|
+
`--approval-policy on-request|untrusted|never`, repeatable `--trusted-dir`, and
|
|
301
|
+
`--timeout` (1–3600 seconds; default 600, or `ai.plan.timeout`) requirements.
|
|
302
|
+
Unset sandbox uses the collector's safe default; explicit confinement requires
|
|
303
|
+
public support and tool-managed behavior is not a confinement guarantee.
|
|
304
|
+
Unsupported policies, model/effort combinations, or `ai.plan.mode` transport
|
|
305
|
+
overrides fail clearly. `--yolo` affects only WADE's post-plan confirmations;
|
|
306
|
+
`auto` and `accept-edits` are rejected. The separate implementation offer still
|
|
307
|
+
requires explicit confirmation.
|
|
308
|
+
|
|
309
|
+
Omitting the network flag adds no network grant; it does not promise isolation
|
|
310
|
+
for an unrestricted or tool-managed runtime. Explicit `--no-network-access`
|
|
311
|
+
requires supported sandbox network control (and is rejected with `--no-sandbox`
|
|
312
|
+
in the adopted contract). WADE never drops that explicit restriction to enable
|
|
313
|
+
a collector.
|
|
314
|
+
|
|
315
|
+
Eligibility follows Crossby's complete-session metadata and bounded version
|
|
316
|
+
preflight after final tool selection, before worktree/provider mutations.
|
|
317
|
+
With the adopted release, Claude (attached terminal), Codex, and OpenCode support
|
|
318
|
+
WADE's required command policy. Cursor and Antigravity CLI are rejected until
|
|
319
|
+
their collectors support that policy; Copilot lacks native-question collection,
|
|
320
|
+
and GUI launchers are unsupported. This is not a permanent tool allowlist.
|
|
321
|
+
Authentication, model availability, protocol negotiation, and artifacts are
|
|
322
|
+
checked at runtime; static preflight does not promise them. Unavailable input
|
|
323
|
+
never supplies a native answer or permission grant.
|
|
324
|
+
|
|
325
|
+
Session IDs and exact native provenance are retained. The collection API does
|
|
326
|
+
not provide a full transcript or token usage; WADE reports them unavailable,
|
|
327
|
+
without substituting the plan text or fabricated usage totals.
|
|
289
328
|
|
|
290
329
|
`wade plan --issue <N>` re-plans an existing task. If the session produces a
|
|
291
330
|
single plan file, it's attached to `#N` and the task stays open. If the
|
|
@@ -296,8 +335,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
|
|
|
296
335
|
`--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
|
|
297
336
|
left open with a warning instead of superseding on a partial split.
|
|
298
337
|
|
|
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
338
|
### Base branch
|
|
302
339
|
|
|
303
340
|
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 +534,17 @@ enough to pick up improvements, with no re-init or migration.
|
|
|
497
534
|
| Worktree containment | Writes that land outside your worktree |
|
|
498
535
|
| Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
|
|
499
536
|
| Session completion | Finishing an implement/review session with unfinished work not yet run through `done` (nudges once) |
|
|
500
|
-
|
|
|
537
|
+
| Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
|
|
501
538
|
|
|
502
539
|
The session-completion guard keys on the same fact `done` records — a sha-keyed
|
|
503
540
|
`.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
|
|
504
541
|
when the branch has commits ahead of its base **and** `done` has not finalized
|
|
505
542
|
the current commit. An early "stopping to ask a question" turn (no commits ahead)
|
|
506
|
-
never triggers it.
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
543
|
+
never triggers it. This Stop nudge fails **open**. Native planning does not
|
|
544
|
+
install the old file-based Stop nudge: canonical files exist only after the
|
|
545
|
+
collector returns. Required review and validation now run in the parent.
|
|
546
|
+
Native transports may exclude ambient tool settings/hooks to preserve command
|
|
547
|
+
policy; hooks are defense in depth, not a native collection guarantee.
|
|
510
548
|
|
|
511
549
|
Independently of that nudge, `wade plan` now **strictly validates** plan files
|
|
512
550
|
before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
|
|
@@ -530,8 +568,8 @@ the label never fails task creation, and a body with no `## Complexity` section
|
|
|
530
568
|
just skips it. An explicit `--label complexity:X` takes precedence over the body
|
|
531
569
|
value, so the task never ends up with two conflicting complexity labels.
|
|
532
570
|
|
|
533
|
-
If some files pass and others fail,
|
|
534
|
-
|
|
571
|
+
If some files pass and others fail, a human must explicitly accept a
|
|
572
|
+
dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
|
|
535
573
|
If you decline, or if every plan file fails validation, no tasks are created —
|
|
536
574
|
the generated `PLAN*.md` are preserved to a temp directory so you can fix the
|
|
537
575
|
reported errors and re-run instead of regenerating from scratch.
|
|
@@ -652,6 +690,9 @@ Description body here. Sub-headings, code blocks, anything markdown.
|
|
|
652
690
|
|
|
653
691
|
### Permission modes
|
|
654
692
|
|
|
693
|
+
These autonomy tiers apply to ordinary launches. Native `wade plan` is the
|
|
694
|
+
exception described above: default/YOLO control the parent, never the child.
|
|
695
|
+
|
|
655
696
|
`--permission-mode` sets how much autonomy the AI tool is granted — an axis
|
|
656
697
|
independent of the delegation `--mode` (which controls *how* a tool is
|
|
657
698
|
dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
|
|
@@ -713,6 +754,9 @@ failure feedback, and any truncation is labeled.
|
|
|
713
754
|
|
|
714
755
|
### AI runtime sandbox profile
|
|
715
756
|
|
|
757
|
+
The defaults below apply to **non-plan launches**. Native planning uses the
|
|
758
|
+
independent request policies described in [Planning & base branches](#planning--base-branches).
|
|
759
|
+
|
|
716
760
|
`ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
|
|
717
761
|
the **AI runtime** inside its own filesystem sandbox. It governs the external
|
|
718
762
|
runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
@@ -722,9 +766,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
|
722
766
|
| `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
767
|
| `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
|
|
724
768
|
|
|
725
|
-
Network access is **on in both profiles** and is
|
|
726
|
-
|
|
727
|
-
|
|
769
|
+
Network access is **on in both non-plan profiles** and is not configurable for
|
|
770
|
+
ordinary launches. Not every phase needs it (dependency analysis does not),
|
|
771
|
+
but the phases that do — `git
|
|
728
772
|
fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
|
|
729
773
|
is fixed at launch.
|
|
730
774
|
|
|
@@ -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,58 @@ 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>` | Validate materialized plans (not native collection or task persistence) |
|
|
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` enters the selected tool's **native Plan mode before the first task
|
|
248
|
+
turn**. Crossby collects one authoritative Markdown artifact; WADE imports its
|
|
249
|
+
plans, runs the fixed review and strict validation, then creates a lightweight
|
|
250
|
+
task plus a draft PR per accepted plan. It never substitutes `/plan`, an editing
|
|
251
|
+
session, or a hook for native activation.
|
|
252
|
+
|
|
253
|
+
One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
|
|
254
|
+
acceptance criteria). Multiple tasks use the explicit versioned
|
|
255
|
+
[plan bundle contract](templates/workflows/reference/plan-output-contract.md),
|
|
256
|
+
with filenames and `depends_on` relationships; headings do not imply task
|
|
257
|
+
boundaries. Knowledge-enabled sessions also use the bundle to return ratings.
|
|
258
|
+
The parent runs the frozen plan-review method; prompt-mode review needs actual
|
|
259
|
+
self-review and explicit acknowledgement, so it cannot complete noninteractively.
|
|
260
|
+
Review failures preserve output instead of creating tasks.
|
|
261
|
+
|
|
262
|
+
Planning has independent `--sandbox` / `--no-sandbox`,
|
|
263
|
+
`--network-access` / `--no-network-access`,
|
|
264
|
+
`--approval-policy on-request|untrusted|never`, repeatable `--trusted-dir`, and
|
|
265
|
+
`--timeout` (1–3600 seconds; default 600, or `ai.plan.timeout`) requirements.
|
|
266
|
+
Unset sandbox uses the collector's safe default; explicit confinement requires
|
|
267
|
+
public support and tool-managed behavior is not a confinement guarantee.
|
|
268
|
+
Unsupported policies, model/effort combinations, or `ai.plan.mode` transport
|
|
269
|
+
overrides fail clearly. `--yolo` affects only WADE's post-plan confirmations;
|
|
270
|
+
`auto` and `accept-edits` are rejected. The separate implementation offer still
|
|
271
|
+
requires explicit confirmation.
|
|
272
|
+
|
|
273
|
+
Omitting the network flag adds no network grant; it does not promise isolation
|
|
274
|
+
for an unrestricted or tool-managed runtime. Explicit `--no-network-access`
|
|
275
|
+
requires supported sandbox network control (and is rejected with `--no-sandbox`
|
|
276
|
+
in the adopted contract). WADE never drops that explicit restriction to enable
|
|
277
|
+
a collector.
|
|
278
|
+
|
|
279
|
+
Eligibility follows Crossby's complete-session metadata and bounded version
|
|
280
|
+
preflight after final tool selection, before worktree/provider mutations.
|
|
281
|
+
With the adopted release, Claude (attached terminal), Codex, and OpenCode support
|
|
282
|
+
WADE's required command policy. Cursor and Antigravity CLI are rejected until
|
|
283
|
+
their collectors support that policy; Copilot lacks native-question collection,
|
|
284
|
+
and GUI launchers are unsupported. This is not a permanent tool allowlist.
|
|
285
|
+
Authentication, model availability, protocol negotiation, and artifacts are
|
|
286
|
+
checked at runtime; static preflight does not promise them. Unavailable input
|
|
287
|
+
never supplies a native answer or permission grant.
|
|
288
|
+
|
|
289
|
+
Session IDs and exact native provenance are retained. The collection API does
|
|
290
|
+
not provide a full transcript or token usage; WADE reports them unavailable,
|
|
291
|
+
without substituting the plan text or fabricated usage totals.
|
|
253
292
|
|
|
254
293
|
`wade plan --issue <N>` re-plans an existing task. If the session produces a
|
|
255
294
|
single plan file, it's attached to `#N` and the task stays open. If the
|
|
@@ -260,8 +299,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
|
|
|
260
299
|
`--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
|
|
261
300
|
left open with a warning instead of superseding on a partial split.
|
|
262
301
|
|
|
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
302
|
### Base branch
|
|
266
303
|
|
|
267
304
|
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 +498,17 @@ enough to pick up improvements, with no re-init or migration.
|
|
|
461
498
|
| Worktree containment | Writes that land outside your worktree |
|
|
462
499
|
| Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
|
|
463
500
|
| Session completion | Finishing an implement/review session with unfinished work not yet run through `done` (nudges once) |
|
|
464
|
-
|
|
|
501
|
+
| Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
|
|
465
502
|
|
|
466
503
|
The session-completion guard keys on the same fact `done` records — a sha-keyed
|
|
467
504
|
`.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
|
|
468
505
|
when the branch has commits ahead of its base **and** `done` has not finalized
|
|
469
506
|
the current commit. An early "stopping to ask a question" turn (no commits ahead)
|
|
470
|
-
never triggers it.
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
507
|
+
never triggers it. This Stop nudge fails **open**. Native planning does not
|
|
508
|
+
install the old file-based Stop nudge: canonical files exist only after the
|
|
509
|
+
collector returns. Required review and validation now run in the parent.
|
|
510
|
+
Native transports may exclude ambient tool settings/hooks to preserve command
|
|
511
|
+
policy; hooks are defense in depth, not a native collection guarantee.
|
|
474
512
|
|
|
475
513
|
Independently of that nudge, `wade plan` now **strictly validates** plan files
|
|
476
514
|
before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
|
|
@@ -494,8 +532,8 @@ the label never fails task creation, and a body with no `## Complexity` section
|
|
|
494
532
|
just skips it. An explicit `--label complexity:X` takes precedence over the body
|
|
495
533
|
value, so the task never ends up with two conflicting complexity labels.
|
|
496
534
|
|
|
497
|
-
If some files pass and others fail,
|
|
498
|
-
|
|
535
|
+
If some files pass and others fail, a human must explicitly accept a
|
|
536
|
+
dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
|
|
499
537
|
If you decline, or if every plan file fails validation, no tasks are created —
|
|
500
538
|
the generated `PLAN*.md` are preserved to a temp directory so you can fix the
|
|
501
539
|
reported errors and re-run instead of regenerating from scratch.
|
|
@@ -616,6 +654,9 @@ Description body here. Sub-headings, code blocks, anything markdown.
|
|
|
616
654
|
|
|
617
655
|
### Permission modes
|
|
618
656
|
|
|
657
|
+
These autonomy tiers apply to ordinary launches. Native `wade plan` is the
|
|
658
|
+
exception described above: default/YOLO control the parent, never the child.
|
|
659
|
+
|
|
619
660
|
`--permission-mode` sets how much autonomy the AI tool is granted — an axis
|
|
620
661
|
independent of the delegation `--mode` (which controls *how* a tool is
|
|
621
662
|
dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
|
|
@@ -677,6 +718,9 @@ failure feedback, and any truncation is labeled.
|
|
|
677
718
|
|
|
678
719
|
### AI runtime sandbox profile
|
|
679
720
|
|
|
721
|
+
The defaults below apply to **non-plan launches**. Native planning uses the
|
|
722
|
+
independent request policies described in [Planning & base branches](#planning--base-branches).
|
|
723
|
+
|
|
680
724
|
`ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
|
|
681
725
|
the **AI runtime** inside its own filesystem sandbox. It governs the external
|
|
682
726
|
runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
@@ -686,9 +730,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
|
686
730
|
| `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
731
|
| `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
|
|
688
732
|
|
|
689
|
-
Network access is **on in both profiles** and is
|
|
690
|
-
|
|
691
|
-
|
|
733
|
+
Network access is **on in both non-plan profiles** and is not configurable for
|
|
734
|
+
ordinary launches. Not every phase needs it (dependency analysis does not),
|
|
735
|
+
but the phases that do — `git
|
|
692
736
|
fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
|
|
693
737
|
is fixed at launch.
|
|
694
738
|
|