wade-cli 1.2.2__tar.gz → 1.2.5__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.5}/.gitignore +1 -2
- {wade_cli-1.2.2 → wade_cli-1.2.5}/AGENTS.md +10 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/CHANGELOG.md +18 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/CONTRIBUTING.md +5 -1
- {wade_cli-1.2.2 → wade_cli-1.2.5}/KNOWLEDGE.ratings.jsonl +12 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/PKG-INFO +91 -27
- {wade_cli-1.2.2 → wade_cli-1.2.5}/README.md +89 -25
- {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/architecture.md +109 -78
- wade_cli-1.2.5/docs/dev/crossby-native-planning-checkpoint.md +238 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/extending.md +18 -0
- wade_cli-1.2.5/docs/dev/native-cli-plan-verification.md +87 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/testing.md +72 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/workflows-and-skills.md +17 -6
- {wade_cli-1.2.2 → wade_cli-1.2.5}/pyproject.toml +2 -2
- wade_cli-1.2.5/scripts/fmt.sh +7 -0
- wade_cli-1.2.5/scripts/probe_native_plan_handoff.py +119 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/__init__.py +1 -1
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/main.py +38 -4
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/plan_session.py +45 -1
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/review.py +8 -0
- wade_cli-1.2.5/src/wade/models/interactive_plan.py +35 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/permission.py +1 -1
- wade_cli-1.2.5/src/wade/models/plan_bundle.py +64 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/task.py +5 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/workflow.py +3 -3
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/ai_resolution.py +56 -11
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/bootstrap.py +3 -6
- wade_cli-1.2.5/src/wade/services/interactive_plan_service.py +276 -0
- wade_cli-1.2.5/src/wade/services/native_plan_service.py +181 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/plan_service.py +503 -284
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/review_delegation_service.py +42 -4
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/materializer.py +9 -5
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/plan_validation.py +35 -1
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/safe_state.py +28 -6
- wade_cli-1.2.5/templates/prompts/plan-session.md +20 -0
- wade_cli-1.2.5/templates/prompts/session-start-plan.md +7 -0
- wade_cli-1.2.5/templates/workflows/plan.md +65 -0
- wade_cli-1.2.5/templates/workflows/reference/plan-output-contract.md +62 -0
- wade_cli-1.2.5/tests/e2e/test_plan_contract.py +367 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_hooks/test_session_start.py +7 -3
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_permission_mode.py +22 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_ai_resolution.py +9 -1
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_allowlist.py +3 -7
- wade_cli-1.2.5/tests/unit/test_services/test_interactive_plan_service.py +210 -0
- wade_cli-1.2.5/tests/unit/test_services/test_native_plan_service.py +329 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_plan_service.py +678 -1015
- wade_cli-1.2.5/tests/unit/test_services/test_plan_startup_events.py +82 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_crossby_contract.py +56 -2
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_dynamic_skills.py +8 -3
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_yolo.py +18 -27
- wade_cli-1.2.5/uv.lock +1164 -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.5}/.gitattributes +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/.github/workflows/auto-version.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/.github/workflows/ci.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/.github/workflows/pr-title-lint.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/.github/workflows/publish.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/.github/workflows/release.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/.pre-commit-config.yaml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/.wade.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/KNOWLEDGE.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/assets/wade.png +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/docker-compose.e2e.yml +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/documentation-policies.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/docs/dev/skills-system.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/install.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/auto_version.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/changelog.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/check-all.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/check.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/hooks/pre-push +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/install-hooks.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/release.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/setup-worktree.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-concurrency.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-e2e-docker.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-e2e.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-live-ai-taskr.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-live-ai.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test-live-gh.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/scripts/test.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/__main__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/admin.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/autocomplete.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/deps_session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/hook.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/implementation_session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/knowledge.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/review_pr_comments_session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/session_shared.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/skills.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/task.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/cli/worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/config/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/config/loader.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/config/migrations.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/config/schema.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/hooks.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/repo.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/stash.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/git/worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/hooks/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/hooks/cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/hooks/policies.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/logging/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/logging/context.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/logging/setup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/batch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/config.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/delegation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/deps.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/events.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/hooks.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/readiness.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/review.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/review_cycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/session.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/session_manifest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/skill.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/models/worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/_pr_delegate.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/clickup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/github.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/providers/registry.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/batch_review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/bot_trigger.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/check_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/delegation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/deps_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/documentation_receipt_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/_shared.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/batch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/cleanup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/core.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/done.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/draft_pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/lifecycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/implementation_service/usage_tracking.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/auth.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/commands.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/config_io.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/manifest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/migrations.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/prompts_ai.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/prompts_setup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/init_service/shell.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/knowledge_recovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/knowledge_search.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/knowledge_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/prompt_delivery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/review_cycle_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/review_record_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/review_settle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/session_composition_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/skill_diagnostics_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/skill_invocation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/smart_start.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/services/task_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/catalog.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/discovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/doc_targets.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/installer.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/pointer.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/resolver.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/skills/validation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/ui/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/ui/console.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/ui/prompts.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/body_markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/clipboard.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/conventional.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/filelock.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/gitref.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/http.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/install.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/knowledge_file.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/paths.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/process.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/runtime_env.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/slug.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/stale_base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/templates.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/terminal.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/token_usage_markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/src/wade/utils/update_check.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/agents-pointer.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/hooks/commit-msg +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/hooks/pre-commit +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/hooks/pre-push +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/deps-analysis.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/implement-context.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-batch.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-code.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-finding-admission.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-plan.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-pr-comments.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-batch.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-code.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-deps.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-full-branch.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-implementation.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-plan.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/review-result-pr-comments.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/session-start-implement.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/prompts/session-start-review.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/setup-worktree.sh.example +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/batch-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/code-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/dependency-analysis/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/feedback-fix-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/implementation/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/knowledge/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/plan-review/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/planning/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/review-comments/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/task/SKILL.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/task/examples.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/task/plan-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/skills/task/reference/session-summary-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/statusline-command.sh +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/_partials/completion.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/_partials/documentation-step.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/_partials/interaction-policy.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/_partials/knowledge-step.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/_partials/review-budget.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/implementation.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/documentation.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/new-plan.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/pr-summary-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/recovery.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/session-summary-format.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/reference/tracking-issues.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/templates/workflows/review-pr-comments.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/concurrency/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/concurrency/test_batch_multi_pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/concurrency/test_knowledge_merge.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/concurrency/test_lock_retry.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/concurrency/test_stash_race.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/conftest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/_support.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/conftest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/mock_gh_script.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_admin_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_check_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_implement_work_done_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_knowledge_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_mock_gh_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_review_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_smart_start_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_task_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/e2e/test_work_sync_list_contract.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/transcripts/claude_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/transcripts/codex_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/transcripts/copilot_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/fixtures/transcripts/generic_session.txt +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_autostash.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_check.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_dynamic_skill_sessions.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_git.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_implementation_lifecycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_init.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_knowledge.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_markdown_provider.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_skill_context_budget.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/integration/test_skill_install.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/live/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/live/test_wade_live_ai.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/live/test_wade_live_ai_taskr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/live/test_wade_live_gh.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/test_cli_basics.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/conftest.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_autocomplete.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_done_review_hint.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_review_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_session_subapps.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_shell_init.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_skills_session_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_task_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_cli/test_work_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_bot_review_config.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_dynamic_skill_config.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_loader.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_migrations.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_config/test_migrations_atomic.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_console.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_effort.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_all_patches_present.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_branch_list.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_branch_slugify.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_detached_worktree.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_is_merged_into.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_main_checkout_root.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_merge_count.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_pr_base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_pr_lookup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_pr_retry.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_pr_title.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_repo.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_reset_branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_scaffold_commit.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_stash_drop.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_git/test_worktree_remove.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_hooks/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_hooks/test_hook_cli.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_hooks/test_policies.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_batch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_config_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_delegation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_deps_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_deps_partition.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_review.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_review_expectation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_task_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_models/test_workflow_models.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_providers/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_providers/test_clickup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_providers/test_github.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_providers/test_github_pr.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_providers/test_markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_scripts/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_scripts/test_changelog.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_batch_pr_index.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_batch_review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_bot_trigger.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_catchup.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_check.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_delegation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_deps_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_documentation_receipt.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_done_gates.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_done_idempotent.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_done_plan_flag.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_implementation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_init.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_init_shell_integration.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_knowledge_search.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_knowledge_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_no_direct_git.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_pr_summary_path.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_preserve_session_data.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_prompt_delivery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_push_recovery.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_resume_autonomy.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_cycle_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_delegation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_receipts.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_records.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_review_status_block.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_skill_diagnostics_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_skill_invocation_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_smart_start.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_smart_start_resume.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_stale_base_surface.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_sync_base_branch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_task_service.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_doc_targets.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_generic_builtin_boundaries.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_pointer.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_skills/test_review_budget_partial.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/__init__.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_body_markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_conventional.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_filelock.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_gitref.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_http.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_install.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_markdown.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_markers.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_plan_validation.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_process.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_prompts.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_runtime_env.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_slug.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_stale_base.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_terminal.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_terminal_launch.py +0 -0
- {wade_cli-1.2.2 → wade_cli-1.2.5}/tests/unit/test_utils/test_update_check.py +0 -0
|
@@ -92,6 +92,16 @@ 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. For deferred startup (currently Codex), WADE
|
|
97
|
+
handles Crossby's typed ready/submitted events and sends the task exactly once;
|
|
98
|
+
Crossby owns `/plan` and terminal mechanics. The public collected-session API
|
|
99
|
+
remains the fallback for adapters without terminal Plan support. WADE owns explicit file/stdin
|
|
100
|
+
handoff, review receipts bound to current content and frozen skills, validation,
|
|
101
|
+
knowledge handoff, and task persistence; native flags/protocols stay upstream.
|
|
102
|
+
Update the tracked `uv.lock` and Crossby contract tripwire with dependency
|
|
103
|
+
adoptions. Native plans are not transcripts; never scrape tool storage to find them.
|
|
104
|
+
|
|
95
105
|
CLI modules are thin dispatch — they parse flags via Typer, then call service methods. Business logic lives in `services/`, not in `cli/`.
|
|
96
106
|
|
|
97
107
|
> Full package structure, command dispatch, config system, and subsystem details: see `docs/dev/architecture.md`
|
|
@@ -4,6 +4,24 @@ 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.5] — 2026-09-16
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
- launch Codex native UI with deferred prompt delivery (#514) (8424a77)
|
|
12
|
+
|
|
13
|
+
## [v1.2.4] — 2026-09-16
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- restore native interactive planning for CLI tools (#513) (51ec787)
|
|
18
|
+
|
|
19
|
+
## [v1.2.3] — 2026-09-15
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
- integrate Crossby native planning sessions (#512) (c58ea77)
|
|
24
|
+
|
|
7
25
|
## [v1.2.2] — 2026-09-09
|
|
8
26
|
|
|
9
27
|
### 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.5
|
|
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.34.0,>=0.33.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,76 @@ 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, Antigravity CLI, and Codex**
|
|
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. For Codex, Crossby
|
|
287
|
+
submits `/plan` first and WADE sends the task on its ready event. Native questions
|
|
288
|
+
and subsequent interaction stay in the tool.
|
|
289
|
+
|
|
290
|
+
Use `--permission-mode` (or `--yolo`) for the native approval policy:
|
|
291
|
+
|
|
292
|
+
| CLI | Supported modes while planning |
|
|
293
|
+
|-----|--------------------------------|
|
|
294
|
+
| Claude | `default`, `auto`, `yolo` |
|
|
295
|
+
| Cursor | `default`, `auto`, `yolo` |
|
|
296
|
+
| Copilot | `default`, `accept-edits`, `yolo` |
|
|
297
|
+
| OpenCode | `default`, `yolo` |
|
|
298
|
+
| Antigravity CLI | `default`, `yolo` |
|
|
299
|
+
| Codex CLI | `default`, `accept-edits`, `auto`, `yolo` |
|
|
300
|
+
|
|
301
|
+
Unsupported combinations fail before creating a planning worktree. These are
|
|
302
|
+
native approval settings, not permission to implement the plan. The later
|
|
303
|
+
implementation offer still requires an explicit decision.
|
|
304
|
+
|
|
305
|
+
Where the tool supports a native output-directory setting (Claude), WADE uses
|
|
306
|
+
`.wade/plans/native/`. Other tools can keep their native location. Before exit, the planning
|
|
307
|
+
workflow submits it with `wade plan-session done .wade/plans --from-file <path>`;
|
|
308
|
+
`--from-stdin` accepts explicit Markdown when no file is available. WADE writes
|
|
309
|
+
its canonical copies. `wade review plan <file>` reviews those copies inside the
|
|
310
|
+
session; prompt-mode review emits the frozen method and requires actual
|
|
311
|
+
self-review followed by `--ack-self-review`. Run `done` again after review.
|
|
312
|
+
Changed content requires a current review before completion. A missing-review
|
|
313
|
+
error on the first import means the file was imported and awaits review.
|
|
314
|
+
|
|
315
|
+
One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
|
|
316
|
+
acceptance criteria). Multiple tasks use the explicit versioned
|
|
317
|
+
[plan bundle contract](templates/workflows/reference/plan-output-contract.md),
|
|
318
|
+
with filenames and `depends_on` relationships; headings do not imply task
|
|
319
|
+
boundaries. Knowledge-enabled sessions include `knowledge_votes` in that bundle,
|
|
320
|
+
including an explicit empty list when appropriate. The parent revalidates the
|
|
321
|
+
completed handoff after exit, then creates tasks and draft PRs. Failed or missing
|
|
322
|
+
handoffs retain output and create no tasks.
|
|
323
|
+
|
|
324
|
+
**Codex requires CLI 0.154.x and a POSIX terminal (macOS/Linux).** Crossby's
|
|
325
|
+
current startup adapter waits for the rendered Plan indicator before WADE sends
|
|
326
|
+
the initial task; unknown versions or an unrecognized startup screen fail
|
|
327
|
+
without retrying the task. This temporary terminal adapter can be replaced by a
|
|
328
|
+
native launch flag when Codex provides one. WADE requires the task-submitted
|
|
329
|
+
event before collecting the explicit reviewed handoff. Codex can submit plan
|
|
330
|
+
Markdown through `--from-stdin`; no native file destination is assumed.
|
|
331
|
+
|
|
332
|
+
All native terminals now use the ordinary sandbox default (off), including Codex;
|
|
333
|
+
use `--sandbox` or `ai.plan.sandbox: true` to retain confinement. The retained
|
|
334
|
+
collector fallback has its own safe default (on). Explicit `--sandbox`, `--network-access` /
|
|
335
|
+
`--no-network-access`, and `--trusted-dir` require support from the selected tool.
|
|
336
|
+
No network flag adds no network grant and does not promise isolation.
|
|
337
|
+
`--approval-policy on-request|untrusted|never` and `--timeout` are collector
|
|
338
|
+
settings; interactive terminals use `--permission-mode` and have no time limit.
|
|
339
|
+
Set `ai.plan.mode` to `interactive` or leave it unset for native terminals.
|
|
340
|
+
GUI launchers remain unsupported for planning.
|
|
341
|
+
|
|
342
|
+
Authentication, model availability, and successful handoff are runtime checks.
|
|
343
|
+
Native terminal output is retained for recovery; usage is reported only when
|
|
344
|
+
the adapter can extract it from that output. WADE's handoff ID is not a native
|
|
345
|
+
CLI session ID.
|
|
289
346
|
|
|
290
347
|
`wade plan --issue <N>` re-plans an existing task. If the session produces a
|
|
291
348
|
single plan file, it's attached to `#N` and the task stays open. If the
|
|
@@ -296,8 +353,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
|
|
|
296
353
|
`--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
|
|
297
354
|
left open with a warning instead of superseding on a partial split.
|
|
298
355
|
|
|
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
356
|
### Base branch
|
|
302
357
|
|
|
303
358
|
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 +552,17 @@ enough to pick up improvements, with no re-init or migration.
|
|
|
497
552
|
| Worktree containment | Writes that land outside your worktree |
|
|
498
553
|
| Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
|
|
499
554
|
| Session completion | Finishing an implement/review session with unfinished work not yet run through `done` (nudges once) |
|
|
500
|
-
|
|
|
555
|
+
| Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
|
|
501
556
|
|
|
502
557
|
The session-completion guard keys on the same fact `done` records — a sha-keyed
|
|
503
558
|
`.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
|
|
504
559
|
when the branch has commits ahead of its base **and** `done` has not finalized
|
|
505
560
|
the current commit. An early "stopping to ask a question" turn (no commits ahead)
|
|
506
|
-
never triggers it.
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
561
|
+
never triggers it. This Stop nudge fails **open**. Native planning does not
|
|
562
|
+
install the old file-based Stop nudge. Interactive sessions explicitly import,
|
|
563
|
+
review, and complete their plans before exit; the parent revalidates them. Codex
|
|
564
|
+
retains parent-side collection and review. Native transports may differ in hook
|
|
565
|
+
support; completion does not depend on hooks firing.
|
|
510
566
|
|
|
511
567
|
Independently of that nudge, `wade plan` now **strictly validates** plan files
|
|
512
568
|
before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
|
|
@@ -530,8 +586,8 @@ the label never fails task creation, and a body with no `## Complexity` section
|
|
|
530
586
|
just skips it. An explicit `--label complexity:X` takes precedence over the body
|
|
531
587
|
value, so the task never ends up with two conflicting complexity labels.
|
|
532
588
|
|
|
533
|
-
If some files pass and others fail,
|
|
534
|
-
|
|
589
|
+
If some files pass and others fail, a human must explicitly accept a
|
|
590
|
+
dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
|
|
535
591
|
If you decline, or if every plan file fails validation, no tasks are created —
|
|
536
592
|
the generated `PLAN*.md` are preserved to a temp directory so you can fix the
|
|
537
593
|
reported errors and re-run instead of regenerating from scratch.
|
|
@@ -652,6 +708,10 @@ Description body here. Sub-headings, code blocks, anything markdown.
|
|
|
652
708
|
|
|
653
709
|
### Permission modes
|
|
654
710
|
|
|
711
|
+
These autonomy tiers apply to ordinary launches and supported native Plan
|
|
712
|
+
terminals. Codex planning retains parent-only default/YOLO with a separate
|
|
713
|
+
collector approval policy, as described above.
|
|
714
|
+
|
|
655
715
|
`--permission-mode` sets how much autonomy the AI tool is granted — an axis
|
|
656
716
|
independent of the delegation `--mode` (which controls *how* a tool is
|
|
657
717
|
dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
|
|
@@ -661,16 +721,17 @@ dispatched: prompt/interactive/headless). The tiers, most→least permissive, ar
|
|
|
661
721
|
|------|----------|
|
|
662
722
|
| `default` | Prompt for every action (no autonomy grant). |
|
|
663
723
|
| `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
|
|
724
|
+
| `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude and Cursor. |
|
|
665
725
|
| `yolo` | Full autonomy — no prompts. |
|
|
666
726
|
|
|
667
727
|
`--yolo` is a back-compat alias for `--permission-mode yolo`; an explicit
|
|
668
728
|
`--permission-mode` wins when both are given. The same values are accepted in
|
|
669
729
|
`.wade.yml` as `ai.permission_mode` (global) or `ai.<command>.permission_mode`
|
|
670
730
|
(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.
|
|
731
|
+
doesn't support is downgraded automatically for ordinary launches (for example,
|
|
732
|
+
`auto` → `accept-edits` when classifier auto is unavailable), with a warning — WADE forwards the requested tier and
|
|
733
|
+
[`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder. Native Plan combinations are validated strictly and
|
|
734
|
+
rejected if unsupported.
|
|
674
735
|
**Headless launches are always read-only** — any of `deps` /
|
|
675
736
|
`review_plan` / `review_implementation` / `review_batch` dispatched in headless
|
|
676
737
|
delegation mode runs at `default` regardless of the configured tier, and no
|
|
@@ -713,6 +774,9 @@ failure feedback, and any truncation is labeled.
|
|
|
713
774
|
|
|
714
775
|
### AI runtime sandbox profile
|
|
715
776
|
|
|
777
|
+
The defaults below apply to **non-plan launches**. Native planning uses the
|
|
778
|
+
independent request policies described in [Planning & base branches](#planning--base-branches).
|
|
779
|
+
|
|
716
780
|
`ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
|
|
717
781
|
the **AI runtime** inside its own filesystem sandbox. It governs the external
|
|
718
782
|
runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
@@ -722,9 +786,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
|
722
786
|
| `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
787
|
| `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
|
|
724
788
|
|
|
725
|
-
Network access is **on in both profiles** and is
|
|
726
|
-
|
|
727
|
-
|
|
789
|
+
Network access is **on in both non-plan profiles** and is not configurable for
|
|
790
|
+
ordinary launches. Not every phase needs it (dependency analysis does not),
|
|
791
|
+
but the phases that do — `git
|
|
728
792
|
fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
|
|
729
793
|
is fixed at launch.
|
|
730
794
|
|
|
@@ -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,76 @@ 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, Antigravity CLI, and Codex**
|
|
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. For Codex, Crossby
|
|
251
|
+
submits `/plan` first and WADE sends the task on its ready event. Native questions
|
|
252
|
+
and subsequent interaction stay in the tool.
|
|
253
|
+
|
|
254
|
+
Use `--permission-mode` (or `--yolo`) for the native approval policy:
|
|
255
|
+
|
|
256
|
+
| CLI | Supported modes while planning |
|
|
257
|
+
|-----|--------------------------------|
|
|
258
|
+
| Claude | `default`, `auto`, `yolo` |
|
|
259
|
+
| Cursor | `default`, `auto`, `yolo` |
|
|
260
|
+
| Copilot | `default`, `accept-edits`, `yolo` |
|
|
261
|
+
| OpenCode | `default`, `yolo` |
|
|
262
|
+
| Antigravity CLI | `default`, `yolo` |
|
|
263
|
+
| Codex CLI | `default`, `accept-edits`, `auto`, `yolo` |
|
|
264
|
+
|
|
265
|
+
Unsupported combinations fail before creating a planning worktree. These are
|
|
266
|
+
native approval settings, not permission to implement the plan. The later
|
|
267
|
+
implementation offer still requires an explicit decision.
|
|
268
|
+
|
|
269
|
+
Where the tool supports a native output-directory setting (Claude), WADE uses
|
|
270
|
+
`.wade/plans/native/`. Other tools can keep their native location. Before exit, the planning
|
|
271
|
+
workflow submits it with `wade plan-session done .wade/plans --from-file <path>`;
|
|
272
|
+
`--from-stdin` accepts explicit Markdown when no file is available. WADE writes
|
|
273
|
+
its canonical copies. `wade review plan <file>` reviews those copies inside the
|
|
274
|
+
session; prompt-mode review emits the frozen method and requires actual
|
|
275
|
+
self-review followed by `--ack-self-review`. Run `done` again after review.
|
|
276
|
+
Changed content requires a current review before completion. A missing-review
|
|
277
|
+
error on the first import means the file was imported and awaits review.
|
|
278
|
+
|
|
279
|
+
One task can be plain Markdown (`# feat: title`, `## Complexity`, tasks and
|
|
280
|
+
acceptance criteria). Multiple tasks use the explicit versioned
|
|
281
|
+
[plan bundle contract](templates/workflows/reference/plan-output-contract.md),
|
|
282
|
+
with filenames and `depends_on` relationships; headings do not imply task
|
|
283
|
+
boundaries. Knowledge-enabled sessions include `knowledge_votes` in that bundle,
|
|
284
|
+
including an explicit empty list when appropriate. The parent revalidates the
|
|
285
|
+
completed handoff after exit, then creates tasks and draft PRs. Failed or missing
|
|
286
|
+
handoffs retain output and create no tasks.
|
|
287
|
+
|
|
288
|
+
**Codex requires CLI 0.154.x and a POSIX terminal (macOS/Linux).** Crossby's
|
|
289
|
+
current startup adapter waits for the rendered Plan indicator before WADE sends
|
|
290
|
+
the initial task; unknown versions or an unrecognized startup screen fail
|
|
291
|
+
without retrying the task. This temporary terminal adapter can be replaced by a
|
|
292
|
+
native launch flag when Codex provides one. WADE requires the task-submitted
|
|
293
|
+
event before collecting the explicit reviewed handoff. Codex can submit plan
|
|
294
|
+
Markdown through `--from-stdin`; no native file destination is assumed.
|
|
295
|
+
|
|
296
|
+
All native terminals now use the ordinary sandbox default (off), including Codex;
|
|
297
|
+
use `--sandbox` or `ai.plan.sandbox: true` to retain confinement. The retained
|
|
298
|
+
collector fallback has its own safe default (on). Explicit `--sandbox`, `--network-access` /
|
|
299
|
+
`--no-network-access`, and `--trusted-dir` require support from the selected tool.
|
|
300
|
+
No network flag adds no network grant and does not promise isolation.
|
|
301
|
+
`--approval-policy on-request|untrusted|never` and `--timeout` are collector
|
|
302
|
+
settings; interactive terminals use `--permission-mode` and have no time limit.
|
|
303
|
+
Set `ai.plan.mode` to `interactive` or leave it unset for native terminals.
|
|
304
|
+
GUI launchers remain unsupported for planning.
|
|
305
|
+
|
|
306
|
+
Authentication, model availability, and successful handoff are runtime checks.
|
|
307
|
+
Native terminal output is retained for recovery; usage is reported only when
|
|
308
|
+
the adapter can extract it from that output. WADE's handoff ID is not a native
|
|
309
|
+
CLI session ID.
|
|
253
310
|
|
|
254
311
|
`wade plan --issue <N>` re-plans an existing task. If the session produces a
|
|
255
312
|
single plan file, it's attached to `#N` and the task stays open. If the
|
|
@@ -260,8 +317,6 @@ per plan file, a comment and a `> **Superseded by ...**` banner are added to
|
|
|
260
317
|
`--yolo`/non-interactive). If any plan file fails to become a task, `#N` is
|
|
261
318
|
left open with a warning instead of superseding on a partial split.
|
|
262
319
|
|
|
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
320
|
### Base branch
|
|
266
321
|
|
|
267
322
|
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 +516,17 @@ enough to pick up improvements, with no re-init or migration.
|
|
|
461
516
|
| Worktree containment | Writes that land outside your worktree |
|
|
462
517
|
| Plan-artifact | During `wade plan`, writes to anything but plan artifacts |
|
|
463
518
|
| Session completion | Finishing an implement/review session with unfinished work not yet run through `done` (nudges once) |
|
|
464
|
-
|
|
|
519
|
+
| Native plan completion (parent gate) | Creating tasks before authoritative import, review, and strict plan validation |
|
|
465
520
|
|
|
466
521
|
The session-completion guard keys on the same fact `done` records — a sha-keyed
|
|
467
522
|
`.wade/done@<HEAD>` marker written when `done`'s gates pass — so it nudges only
|
|
468
523
|
when the branch has commits ahead of its base **and** `done` has not finalized
|
|
469
524
|
the current commit. An early "stopping to ask a question" turn (no commits ahead)
|
|
470
|
-
never triggers it.
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
525
|
+
never triggers it. This Stop nudge fails **open**. Native planning does not
|
|
526
|
+
install the old file-based Stop nudge. Interactive sessions explicitly import,
|
|
527
|
+
review, and complete their plans before exit; the parent revalidates them. Codex
|
|
528
|
+
retains parent-side collection and review. Native transports may differ in hook
|
|
529
|
+
support; completion does not depend on hooks firing.
|
|
474
530
|
|
|
475
531
|
Independently of that nudge, `wade plan` now **strictly validates** plan files
|
|
476
532
|
before creating tasks: a `PLAN*.md` missing a valid `## Complexity` or a
|
|
@@ -494,8 +550,8 @@ the label never fails task creation, and a body with no `## Complexity` section
|
|
|
494
550
|
just skips it. An explicit `--label complexity:X` takes precedence over the body
|
|
495
551
|
value, so the task never ends up with two conflicting complexity labels.
|
|
496
552
|
|
|
497
|
-
If some files pass and others fail,
|
|
498
|
-
|
|
553
|
+
If some files pass and others fail, a human must explicitly accept a
|
|
554
|
+
dependency-closed valid subset, even with `--yolo`. Noninteractive runs abort.
|
|
499
555
|
If you decline, or if every plan file fails validation, no tasks are created —
|
|
500
556
|
the generated `PLAN*.md` are preserved to a temp directory so you can fix the
|
|
501
557
|
reported errors and re-run instead of regenerating from scratch.
|
|
@@ -616,6 +672,10 @@ Description body here. Sub-headings, code blocks, anything markdown.
|
|
|
616
672
|
|
|
617
673
|
### Permission modes
|
|
618
674
|
|
|
675
|
+
These autonomy tiers apply to ordinary launches and supported native Plan
|
|
676
|
+
terminals. Codex planning retains parent-only default/YOLO with a separate
|
|
677
|
+
collector approval policy, as described above.
|
|
678
|
+
|
|
619
679
|
`--permission-mode` sets how much autonomy the AI tool is granted — an axis
|
|
620
680
|
independent of the delegation `--mode` (which controls *how* a tool is
|
|
621
681
|
dispatched: prompt/interactive/headless). The tiers, most→least permissive, are
|
|
@@ -625,16 +685,17 @@ dispatched: prompt/interactive/headless). The tiers, most→least permissive, ar
|
|
|
625
685
|
|------|----------|
|
|
626
686
|
| `default` | Prompt for every action (no autonomy grant). |
|
|
627
687
|
| `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
|
|
688
|
+
| `auto` | Classifier-mediated auto mode (a model reviews each non-read action). Claude and Cursor. |
|
|
629
689
|
| `yolo` | Full autonomy — no prompts. |
|
|
630
690
|
|
|
631
691
|
`--yolo` is a back-compat alias for `--permission-mode yolo`; an explicit
|
|
632
692
|
`--permission-mode` wins when both are given. The same values are accepted in
|
|
633
693
|
`.wade.yml` as `ai.permission_mode` (global) or `ai.<command>.permission_mode`
|
|
634
694
|
(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.
|
|
695
|
+
doesn't support is downgraded automatically for ordinary launches (for example,
|
|
696
|
+
`auto` → `accept-edits` when classifier auto is unavailable), with a warning — WADE forwards the requested tier and
|
|
697
|
+
[`crossby`](https://github.com/ivanviragine/crossby) owns the downgrade ladder. Native Plan combinations are validated strictly and
|
|
698
|
+
rejected if unsupported.
|
|
638
699
|
**Headless launches are always read-only** — any of `deps` /
|
|
639
700
|
`review_plan` / `review_implementation` / `review_batch` dispatched in headless
|
|
640
701
|
delegation mode runs at `default` regardless of the configured tier, and no
|
|
@@ -677,6 +738,9 @@ failure feedback, and any truncation is labeled.
|
|
|
677
738
|
|
|
678
739
|
### AI runtime sandbox profile
|
|
679
740
|
|
|
741
|
+
The defaults below apply to **non-plan launches**. Native planning uses the
|
|
742
|
+
independent request policies described in [Planning & base branches](#planning--base-branches).
|
|
743
|
+
|
|
680
744
|
`ai.sandbox` is a single cross-tool boolean that decides whether WADE launches
|
|
681
745
|
the **AI runtime** inside its own filesystem sandbox. It governs the external
|
|
682
746
|
runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
@@ -686,9 +750,9 @@ runtime boundary only — it never relaxes WADE's own guards (see below).
|
|
|
686
750
|
| `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
751
|
| `sandbox: true` | Launch the runtime confined. Codex gets `--sandbox workspace-write`, Cursor `--sandbox enabled`. |
|
|
688
752
|
|
|
689
|
-
Network access is **on in both profiles** and is
|
|
690
|
-
|
|
691
|
-
|
|
753
|
+
Network access is **on in both non-plan profiles** and is not configurable for
|
|
754
|
+
ordinary launches. Not every phase needs it (dependency analysis does not),
|
|
755
|
+
but the phases that do — `git
|
|
692
756
|
fetch`/`push`, `gh`, package installs — cannot work without it, and the profile
|
|
693
757
|
is fixed at launch.
|
|
694
758
|
|