wade-cli 1.2.0__tar.gz → 1.2.2__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.0 → wade_cli-1.2.2}/.wade.yml +4 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/CHANGELOG.md +12 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/PKG-INFO +1 -1
- {wade_cli-1.2.0 → wade_cli-1.2.2}/pyproject.toml +1 -1
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/__init__.py +1 -1
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/review_service.py +24 -15
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_service.py +96 -10
- {wade_cli-1.2.0 → wade_cli-1.2.2}/.gitattributes +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/.github/workflows/auto-version.yml +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/.github/workflows/ci.yml +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/.github/workflows/pr-title-lint.yml +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/.github/workflows/publish.yml +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/.github/workflows/release.yml +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/.gitignore +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/.pre-commit-config.yaml +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/AGENTS.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/CONTRIBUTING.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/KNOWLEDGE.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/KNOWLEDGE.ratings.jsonl +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/README.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/assets/wade.png +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/docker-compose.e2e.yml +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/architecture.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/documentation-policies.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/extending.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/skills-system.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/testing.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/docs/dev/workflows-and-skills.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/install.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/auto_version.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/changelog.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/check-all.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/check.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/fmt.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/hooks/pre-push +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/install-hooks.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/release.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/setup-worktree.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-concurrency.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-e2e-docker.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-e2e.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-live-ai-taskr.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-live-ai.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test-live-gh.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/scripts/test.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/__main__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/admin.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/autocomplete.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/deps_session.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/hook.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/implementation_session.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/knowledge.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/main.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/plan_session.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/review.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/review_pr_comments_session.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/session.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/session_shared.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/skills.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/task.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/cli/worktree.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/config/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/config/loader.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/config/migrations.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/config/schema.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/branch.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/hooks.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/pr.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/repo.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/stash.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/sync.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/git/worktree.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/hooks/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/hooks/cli.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/hooks/policies.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/logging/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/logging/context.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/logging/setup.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/batch.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/config.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/delegation.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/deps.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/events.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/hooks.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/permission.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/readiness.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/review.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/review_cycle.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/session.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/session_manifest.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/skill.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/task.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/workflow.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/models/worktree.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/_pr_delegate.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/base.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/clickup.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/github.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/markdown.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/providers/registry.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/ai_resolution.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/batch_review_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/bot_trigger.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/check_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/delegation_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/deps_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/documentation_receipt_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/_shared.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/batch.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/bootstrap.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/cleanup.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/core.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/done.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/draft_pr.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/lifecycle.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/sync.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/usage_tracking.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/auth.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/commands.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/config_io.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/manifest.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/migrations.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/prompts_ai.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/prompts_setup.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/init_service/shell.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/knowledge_recovery.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/knowledge_search.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/knowledge_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/plan_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/prompt_delivery.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/review_cycle_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/review_delegation_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/review_record_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/review_settle.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/session_composition_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/skill_diagnostics_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/skill_invocation_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/smart_start.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/task_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/catalog.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/discovery.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/doc_targets.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/installer.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/materializer.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/pointer.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/resolver.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/skills/validation.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/ui/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/ui/console.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/ui/prompts.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/body_markers.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/clipboard.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/conventional.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/filelock.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/gitref.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/http.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/install.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/knowledge_file.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/markdown.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/markers.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/paths.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/plan_validation.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/process.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/runtime_env.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/safe_state.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/slug.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/stale_base.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/templates.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/terminal.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/token_usage_markdown.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/utils/update_check.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/agents-pointer.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/hooks/commit-msg +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/hooks/pre-commit +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/hooks/pre-push +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/deps-analysis.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/implement-context.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/plan-session.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-batch.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-code.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-finding-admission.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-plan.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-pr-comments.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-batch.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-code.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-deps.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-full-branch.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-implementation.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-plan.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/review-result-pr-comments.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/session-start-implement.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/session-start-plan.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/prompts/session-start-review.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/setup-worktree.sh.example +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/batch-review/SKILL.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/code-review/SKILL.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/dependency-analysis/SKILL.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/feedback-fix-review/SKILL.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/implementation/SKILL.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/knowledge/SKILL.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/plan-review/SKILL.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/planning/SKILL.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/review-comments/SKILL.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/task/SKILL.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/task/examples.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/task/plan-format.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/skills/task/reference/session-summary-format.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/statusline-command.sh +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/_partials/completion.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/_partials/documentation-step.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/_partials/interaction-policy.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/_partials/knowledge-step.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/_partials/review-budget.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/implementation.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/plan.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/documentation.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/new-plan.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/plan-output-contract.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/pr-summary-format.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/recovery.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/session-summary-format.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/reference/tracking-issues.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/templates/workflows/review-pr-comments.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/concurrency/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/concurrency/test_batch_multi_pr.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/concurrency/test_knowledge_merge.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/concurrency/test_lock_retry.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/concurrency/test_stash_race.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/conftest.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/_support.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/conftest.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/mock_gh_script.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_admin_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_check_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_implement_work_done_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_knowledge_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_mock_gh_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_plan_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_review_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_smart_start_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_task_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/e2e/test_work_sync_list_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/transcripts/claude_session.txt +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/transcripts/codex_session.txt +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/transcripts/copilot_session.txt +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/fixtures/transcripts/generic_session.txt +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_autostash.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_check.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_dynamic_skill_sessions.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_git.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_implementation_lifecycle.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_init.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_knowledge.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_markdown_provider.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_skill_context_budget.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/integration/test_skill_install.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/live/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/live/test_wade_live_ai.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/live/test_wade_live_ai_taskr.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/live/test_wade_live_gh.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/test_cli_basics.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/conftest.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_autocomplete.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_done_review_hint.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_review_cli.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_session_subapps.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_shell_init.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_skills_session_cli.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_task_cli.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_cli/test_work_cli.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_bot_review_config.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_dynamic_skill_config.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_loader.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_migrations.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_config/test_migrations_atomic.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_console.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_effort.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_all_patches_present.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_branch_list.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_branch_slugify.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_detached_worktree.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_is_merged_into.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_main_checkout_root.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_merge_count.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_pr_base.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_pr_lookup.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_pr_retry.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_pr_title.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_repo.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_reset_branch.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_scaffold_commit.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_stash_drop.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_git/test_worktree_remove.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_hooks/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_hooks/test_hook_cli.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_hooks/test_policies.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_hooks/test_session_start.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_batch.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_config_models.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_delegation.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_deps_models.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_deps_partition.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_review.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_review_expectation.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_task_models.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_models/test_workflow_models.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_permission_mode.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_providers/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_providers/test_clickup.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_providers/test_github.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_providers/test_github_pr.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_providers/test_markdown.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_scripts/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_scripts/test_changelog.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_ai_resolution.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_batch_pr_index.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_batch_review_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_allowlist.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_guard_matcher.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_bot_trigger.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_catchup.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_check.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_delegation_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_deps_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_documentation_receipt.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_done_gates.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_done_idempotent.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_done_plan_flag.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_implementation_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_init.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_init_shell_integration.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_knowledge_recovery.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_knowledge_search.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_knowledge_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_no_direct_git.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_plan_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_pr_summary_path.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_preserve_session_data.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_prompt_delivery.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_push_recovery.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_resume_autonomy.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_cycle_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_delegation_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_receipts.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_records.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_review_status_block.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_skill_diagnostics_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_skill_invocation_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_smart_start.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_smart_start_resume.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_stale_base_surface.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_sync_base_branch.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_task_service.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_crossby_contract.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_doc_targets.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_dynamic_skills.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_generic_builtin_boundaries.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_pointer.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_skills/test_review_budget_partial.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/__init__.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_body_markers.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_conventional.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_filelock.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_gitref.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_http.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_install.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_markdown.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_markers.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_plan_validation.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_process.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_prompts.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_runtime_env.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_slug.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_stale_base.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_terminal.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_terminal_launch.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_utils/test_update_check.py +0 -0
- {wade_cli-1.2.0 → wade_cli-1.2.2}/tests/unit/test_yolo.py +0 -0
|
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Conventional Commits](https://conventionalcommits.org/).
|
|
6
6
|
|
|
7
|
+
## [v1.2.2] — 2026-09-09
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
- keep retained effort editable in PR-comment retry sessions (#507) (8daabc8)
|
|
12
|
+
|
|
13
|
+
## [v1.2.1] — 2026-09-08
|
|
14
|
+
|
|
15
|
+
### Chores
|
|
16
|
+
|
|
17
|
+
- use sol high for planning (beec132)
|
|
18
|
+
|
|
7
19
|
## [v1.2.0] — 2026-09-08
|
|
8
20
|
|
|
9
21
|
### Features
|
|
@@ -88,11 +88,12 @@ from wade.utils.terminal import (
|
|
|
88
88
|
|
|
89
89
|
logger = structlog.get_logger()
|
|
90
90
|
|
|
91
|
-
# ``None`` means no caller choice, which lets ``resolve_effort`` read
|
|
92
|
-
# The review confirmation UI also offers a distinct "none — use tool
|
|
93
|
-
# choice; its value must survive a wait/relaunch without being
|
|
94
|
-
# unset case. This string is accepted by the
|
|
95
|
-
#
|
|
91
|
+
# ``None`` means no caller or retry choice, which lets ``resolve_effort`` read
|
|
92
|
+
# config. The review confirmation UI also offers a distinct "none — use tool
|
|
93
|
+
# default" choice; its value must survive a wait/relaunch without being
|
|
94
|
+
# mistaken for the unset case. This string is accepted by the public
|
|
95
|
+
# ``--effort`` option used in a recovery command, but is private to this
|
|
96
|
+
# review-session handoff.
|
|
96
97
|
_EXPLICIT_DEFAULT_EFFORT = "none"
|
|
97
98
|
|
|
98
99
|
|
|
@@ -1266,9 +1267,15 @@ def start(
|
|
|
1266
1267
|
tool=resolved_tool,
|
|
1267
1268
|
complexity=task.complexity.value if task.complexity else None,
|
|
1268
1269
|
)
|
|
1270
|
+
# A retry payload and a CLI override deliberately mean different things.
|
|
1271
|
+
# ``effort_explicit`` says this invocation received ``--effort`` and locks
|
|
1272
|
+
# the selector; a non-None ``effort`` can also be a prior UI selection that
|
|
1273
|
+
# must remain editable. Its presence, rather than CLI explicitness, decodes
|
|
1274
|
+
# the UI's retained "none — use tool default" sentinel.
|
|
1275
|
+
effort_payload_present = effort is not None
|
|
1269
1276
|
resolved_effort = (
|
|
1270
1277
|
None
|
|
1271
|
-
if
|
|
1278
|
+
if effort == _EXPLICIT_DEFAULT_EFFORT
|
|
1272
1279
|
else resolve_effort(
|
|
1273
1280
|
effort,
|
|
1274
1281
|
config,
|
|
@@ -1341,13 +1348,13 @@ def start(
|
|
|
1341
1348
|
)
|
|
1342
1349
|
|
|
1343
1350
|
# Configuration-derived effort should continue to re-resolve when the user
|
|
1344
|
-
# waits for a later review. Preserve a
|
|
1345
|
-
#
|
|
1346
|
-
#
|
|
1347
|
-
|
|
1351
|
+
# waits for a later review. Preserve a retry/CLI payload, or an actual
|
|
1352
|
+
# confirmation-UI change, without promoting either a retained UI choice or
|
|
1353
|
+
# an implicit configuration value into a CLI override.
|
|
1354
|
+
should_retain_effort_payload = effort_payload_present or resolved_effort != initial_effort
|
|
1348
1355
|
retained_effort = (
|
|
1349
1356
|
(resolved_effort.value if resolved_effort is not None else _EXPLICIT_DEFAULT_EFFORT)
|
|
1350
|
-
if
|
|
1357
|
+
if should_retain_effort_payload
|
|
1351
1358
|
else None
|
|
1352
1359
|
)
|
|
1353
1360
|
|
|
@@ -1531,7 +1538,7 @@ def start(
|
|
|
1531
1538
|
ai_explicit=ai_explicit,
|
|
1532
1539
|
model_explicit=model_explicit,
|
|
1533
1540
|
effort=retained_effort,
|
|
1534
|
-
effort_explicit=
|
|
1541
|
+
effort_explicit=effort_explicit,
|
|
1535
1542
|
permission_mode=resolved_permission_mode.value,
|
|
1536
1543
|
permission_mode_explicit=permission_mode_explicit,
|
|
1537
1544
|
sandbox=sandbox,
|
|
@@ -1765,9 +1772,11 @@ def _post_review_lifecycle(
|
|
|
1765
1772
|
) -> None:
|
|
1766
1773
|
"""Post-review lifecycle menu: Merge PR or wait for new reviews.
|
|
1767
1774
|
|
|
1768
|
-
|
|
1769
|
-
reviews" re-launch rather than re-resolving from configuration.
|
|
1770
|
-
|
|
1775
|
+
A retained effort payload and sandbox selection must survive a "wait for
|
|
1776
|
+
new reviews" re-launch rather than re-resolving from configuration.
|
|
1777
|
+
``effort_explicit`` separately records a real CLI override, which is the
|
|
1778
|
+
only source that locks the effort selector. ``None`` (unset) still
|
|
1779
|
+
re-resolves, matching the non-explicit permission-mode path.
|
|
1771
1780
|
"""
|
|
1772
1781
|
from wade.ui import prompts
|
|
1773
1782
|
|
|
@@ -642,7 +642,7 @@ class TestReviewServiceStart:
|
|
|
642
642
|
assert mock_post.call_args.kwargs["effort"] is None
|
|
643
643
|
assert mock_post.call_args.kwargs["effort_explicit"] is False
|
|
644
644
|
|
|
645
|
-
def
|
|
645
|
+
def test_ui_default_effort_survives_waiting_for_reviews(
|
|
646
646
|
self, tmp_path: Path, mock_setup: dict[str, MagicMock]
|
|
647
647
|
) -> None:
|
|
648
648
|
"""Choosing the UI's tool default must override a configured effort later."""
|
|
@@ -672,7 +672,95 @@ class TestReviewServiceStart:
|
|
|
672
672
|
assert start(target="42") is True
|
|
673
673
|
|
|
674
674
|
assert mock_post.call_args.kwargs["effort"] == "none"
|
|
675
|
-
assert mock_post.call_args.kwargs["effort_explicit"] is
|
|
675
|
+
assert mock_post.call_args.kwargs["effort_explicit"] is False
|
|
676
|
+
|
|
677
|
+
def test_retained_effort_is_preselected_editable_and_re_retained(
|
|
678
|
+
self, tmp_path: Path, mock_setup: dict[str, MagicMock]
|
|
679
|
+
) -> None:
|
|
680
|
+
"""A retained UI level stays editable and survives another unchanged retry."""
|
|
681
|
+
from crossby.models.ai import AIToolID, EffortLevel
|
|
682
|
+
|
|
683
|
+
from wade.services.ai_resolution import confirm_ai_selection
|
|
684
|
+
|
|
685
|
+
mock_setup[
|
|
686
|
+
"get_comprehensive_review_status"
|
|
687
|
+
].return_value = self._changes_requested_status()
|
|
688
|
+
mock_setup["resolve_ai_tool"].return_value = "codex"
|
|
689
|
+
# Use the real confirmation UI behind the fixture's call spy so this
|
|
690
|
+
# exercises the selector that the next start() invocation presents.
|
|
691
|
+
mock_setup["confirm_ai_selection"].side_effect = confirm_ai_selection
|
|
692
|
+
adapter = MagicMock()
|
|
693
|
+
caps = adapter.capabilities.return_value
|
|
694
|
+
caps.supports_effort = True
|
|
695
|
+
caps.supports_accept_edits = False
|
|
696
|
+
caps.supports_auto = False
|
|
697
|
+
caps.supports_yolo = False
|
|
698
|
+
caps.blocks_until_exit = False
|
|
699
|
+
adapter.launch.return_value = 0
|
|
700
|
+
menu_items_seen: list[list[str]] = []
|
|
701
|
+
|
|
702
|
+
def select_proceed(_title: str, items: list[str], **_kwargs: object) -> int:
|
|
703
|
+
menu_items_seen.append(items)
|
|
704
|
+
return items.index("Proceed")
|
|
705
|
+
|
|
706
|
+
with (
|
|
707
|
+
patch("wade.services.review_service.resolve_effort", return_value=EffortLevel.XHIGH),
|
|
708
|
+
patch("wade.services.review_service.resolve_sandbox", return_value=False),
|
|
709
|
+
patch("crossby.ai_tools.AbstractAITool.get", return_value=adapter),
|
|
710
|
+
patch(
|
|
711
|
+
"crossby.ai_tools.AbstractAITool.detect_installed",
|
|
712
|
+
return_value=[AIToolID.CODEX],
|
|
713
|
+
),
|
|
714
|
+
patch("wade.services.review_service.deliver_prompt_if_needed"),
|
|
715
|
+
patch("wade.ui.prompts.is_tty", return_value=True),
|
|
716
|
+
patch("wade.ui.prompts.select", side_effect=select_proceed),
|
|
717
|
+
patch("wade.ui.prompts.confirm", return_value=True),
|
|
718
|
+
patch("wade.services.review_service._post_review_lifecycle") as mock_post,
|
|
719
|
+
):
|
|
720
|
+
assert start(target="42", effort="xhigh", effort_explicit=False) is True
|
|
721
|
+
|
|
722
|
+
confirm_kwargs = mock_setup["confirm_ai_selection"].call_args.kwargs
|
|
723
|
+
assert confirm_kwargs["resolved_effort"] is EffortLevel.XHIGH
|
|
724
|
+
assert confirm_kwargs["effort_explicit"] is False
|
|
725
|
+
assert "Change effort" in menu_items_seen[0]
|
|
726
|
+
# Proceeding with the retained selection must not drop it on the next wait.
|
|
727
|
+
assert mock_post.call_args.kwargs["effort"] == "xhigh"
|
|
728
|
+
assert mock_post.call_args.kwargs["effort_explicit"] is False
|
|
729
|
+
|
|
730
|
+
def test_retained_tool_default_bypasses_config_and_stays_editable(
|
|
731
|
+
self, tmp_path: Path, mock_setup: dict[str, MagicMock]
|
|
732
|
+
) -> None:
|
|
733
|
+
"""A retained ``none`` is distinct from no retry payload and never locks the picker."""
|
|
734
|
+
mock_setup[
|
|
735
|
+
"get_comprehensive_review_status"
|
|
736
|
+
].return_value = self._changes_requested_status()
|
|
737
|
+
mock_setup["resolve_ai_tool"].return_value = "codex"
|
|
738
|
+
mock_setup["confirm_ai_selection"].return_value = (
|
|
739
|
+
"codex",
|
|
740
|
+
None,
|
|
741
|
+
None,
|
|
742
|
+
PermissionMode.DEFAULT,
|
|
743
|
+
)
|
|
744
|
+
adapter = MagicMock()
|
|
745
|
+
adapter.launch.return_value = 0
|
|
746
|
+
adapter.capabilities.return_value.blocks_until_exit = False
|
|
747
|
+
|
|
748
|
+
with (
|
|
749
|
+
patch("wade.services.review_service.resolve_effort") as mock_resolve_effort,
|
|
750
|
+
patch("wade.services.review_service.resolve_sandbox", return_value=False),
|
|
751
|
+
patch("crossby.ai_tools.AbstractAITool.get", return_value=adapter),
|
|
752
|
+
patch("wade.services.review_service.deliver_prompt_if_needed"),
|
|
753
|
+
patch("wade.ui.prompts.confirm", return_value=True),
|
|
754
|
+
patch("wade.services.review_service._post_review_lifecycle") as mock_post,
|
|
755
|
+
):
|
|
756
|
+
assert start(target="42", effort="none", effort_explicit=False) is True
|
|
757
|
+
|
|
758
|
+
mock_resolve_effort.assert_not_called()
|
|
759
|
+
confirm_kwargs = mock_setup["confirm_ai_selection"].call_args.kwargs
|
|
760
|
+
assert confirm_kwargs["resolved_effort"] is None
|
|
761
|
+
assert confirm_kwargs["effort_explicit"] is False
|
|
762
|
+
assert mock_post.call_args.kwargs["effort"] == "none"
|
|
763
|
+
assert mock_post.call_args.kwargs["effort_explicit"] is False
|
|
676
764
|
|
|
677
765
|
def test_detached_launch_receives_worktree_context(
|
|
678
766
|
self, tmp_path: Path, mock_setup: dict[str, MagicMock]
|
|
@@ -781,7 +869,7 @@ class TestReviewServiceStart:
|
|
|
781
869
|
assert mock_start.call_args.kwargs["sandbox"] is False
|
|
782
870
|
|
|
783
871
|
def test_post_lifecycle_relaunch_forwards_confirmed_effort(self, tmp_path: Path) -> None:
|
|
784
|
-
"""A
|
|
872
|
+
"""A UI-confirmed effort survives a re-launch without locking its picker."""
|
|
785
873
|
from wade.services.review_service import PollOutcome
|
|
786
874
|
|
|
787
875
|
with (
|
|
@@ -801,15 +889,13 @@ class TestReviewServiceStart:
|
|
|
801
889
|
99,
|
|
802
890
|
MagicMock(),
|
|
803
891
|
effort="high",
|
|
804
|
-
effort_explicit=
|
|
892
|
+
effort_explicit=False,
|
|
805
893
|
)
|
|
806
894
|
|
|
807
895
|
assert mock_start.call_args.kwargs["effort"] == "high"
|
|
808
|
-
assert mock_start.call_args.kwargs["effort_explicit"] is
|
|
896
|
+
assert mock_start.call_args.kwargs["effort_explicit"] is False
|
|
809
897
|
|
|
810
|
-
def
|
|
811
|
-
self, tmp_path: Path
|
|
812
|
-
) -> None:
|
|
898
|
+
def test_post_lifecycle_relaunch_forwards_ui_tool_default_effort(self, tmp_path: Path) -> None:
|
|
813
899
|
"""The explicit default is distinct from an unset effort override."""
|
|
814
900
|
from wade.services.review_service import PollOutcome
|
|
815
901
|
|
|
@@ -830,11 +916,11 @@ class TestReviewServiceStart:
|
|
|
830
916
|
99,
|
|
831
917
|
MagicMock(),
|
|
832
918
|
effort="none",
|
|
833
|
-
effort_explicit=
|
|
919
|
+
effort_explicit=False,
|
|
834
920
|
)
|
|
835
921
|
|
|
836
922
|
assert mock_start.call_args.kwargs["effort"] == "none"
|
|
837
|
-
assert mock_start.call_args.kwargs["effort_explicit"] is
|
|
923
|
+
assert mock_start.call_args.kwargs["effort_explicit"] is False
|
|
838
924
|
|
|
839
925
|
def test_resolves_worktree_by_issue_when_title_drifted(
|
|
840
926
|
self, mock_setup: dict[str, MagicMock]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wade_cli-1.2.0 → wade_cli-1.2.2}/src/wade/services/implementation_service/usage_tracking.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|