wade-cli 0.0.2__tar.gz → 0.29.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wade_cli-0.29.0/.github/workflows/auto-version.yml +73 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/.github/workflows/ci.yml +7 -25
- wade_cli-0.29.0/.github/workflows/pr-title-lint.yml +31 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/.gitignore +11 -5
- {wade_cli-0.0.2 → wade_cli-0.29.0}/.pre-commit-config.yaml +5 -13
- wade_cli-0.29.0/.wade.yml +66 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/AGENTS.md +6 -45
- wade_cli-0.29.0/CHANGELOG.md +712 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/CONTRIBUTING.md +7 -13
- wade_cli-0.29.0/KNOWLEDGE.md +115 -0
- wade_cli-0.29.0/KNOWLEDGE.ratings.yml +27 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/PKG-INFO +111 -16
- {wade_cli-0.0.2 → wade_cli-0.29.0}/README.md +107 -14
- wade_cli-0.29.0/docker-compose.e2e.yml +25 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/docs/dev/architecture.md +79 -43
- {wade_cli-0.0.2 → wade_cli-0.29.0}/docs/dev/documentation-policies.md +4 -4
- {wade_cli-0.0.2 → wade_cli-0.29.0}/docs/dev/extending.md +11 -11
- {wade_cli-0.0.2 → wade_cli-0.29.0}/docs/dev/skills-system.md +33 -13
- wade_cli-0.29.0/docs/dev/testing.md +246 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/install.sh +1 -1
- {wade_cli-0.0.2 → wade_cli-0.29.0}/pyproject.toml +18 -3
- wade_cli-0.29.0/scripts/release.sh +92 -0
- wade_cli-0.29.0/scripts/setup-worktree.sh +29 -0
- wade_cli-0.29.0/scripts/test-e2e-docker.sh +29 -0
- wade_cli-0.29.0/scripts/test-e2e.sh +4 -0
- wade_cli-0.29.0/scripts/test-live-ai-taskr.sh +156 -0
- wade_cli-0.29.0/scripts/test-live-ai.sh +38 -0
- wade_cli-0.29.0/scripts/test-live-gh.sh +42 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/test.sh +5 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/__init__.py +1 -1
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/cli/admin.py +20 -28
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/cli/autocomplete.py +18 -2
- wade_cli-0.29.0/src/wade/cli/implementation_session.py +148 -0
- wade_cli-0.29.0/src/wade/cli/knowledge.py +359 -0
- wade_cli-0.29.0/src/wade/cli/main.py +607 -0
- wade_cli-0.29.0/src/wade/cli/plan_session.py +55 -0
- wade_cli-0.29.0/src/wade/cli/review.py +196 -0
- wade_cli-0.29.0/src/wade/cli/review_pr_comments_session.py +120 -0
- wade_cli-0.29.0/src/wade/cli/session_shared.py +61 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/cli/task.py +89 -9
- wade_cli-0.29.0/src/wade/cli/worktree.py +130 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/config/loader.py +84 -13
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/config/migrations.py +29 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/db/__init__.py +8 -1
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/db/repositories.py +6 -1
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/db/tables.py +1 -1
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/__init__.py +10 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/pr.py +170 -16
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/repo.py +96 -1
- wade_cli-0.29.0/src/wade/git/stash.py +158 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/sync.py +1 -1
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/worktree.py +35 -0
- wade_cli-0.29.0/src/wade/hooks/__init__.py +19 -0
- wade_cli-0.29.0/src/wade/hooks/plan_write_guard.py +200 -0
- wade_cli-0.29.0/src/wade/hooks/worktree_guard.py +186 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/models/__init__.py +14 -3
- wade_cli-0.29.0/src/wade/models/batch.py +33 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/models/config.py +98 -15
- wade_cli-0.29.0/src/wade/models/delegation.py +42 -0
- wade_cli-0.29.0/src/wade/models/review.py +517 -0
- wade_cli-0.0.2/src/wade/models/work.py → wade_cli-0.29.0/src/wade/models/session.py +42 -6
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/models/task.py +92 -5
- wade_cli-0.29.0/src/wade/providers/__init__.py +39 -0
- wade_cli-0.29.0/src/wade/providers/_pr_delegate.py +69 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/providers/base.py +67 -43
- wade_cli-0.29.0/src/wade/providers/clickup.py +326 -0
- wade_cli-0.29.0/src/wade/providers/github.py +983 -0
- wade_cli-0.29.0/src/wade/providers/markdown.py +703 -0
- wade_cli-0.29.0/src/wade/providers/registry.py +72 -0
- wade_cli-0.29.0/src/wade/services/ai_resolution.py +350 -0
- wade_cli-0.29.0/src/wade/services/batch_review_service.py +548 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/check_service.py +172 -15
- wade_cli-0.29.0/src/wade/services/delegation_service.py +271 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/deps_service.py +212 -175
- wade_cli-0.29.0/src/wade/services/implementation_service/__init__.py +11 -0
- wade_cli-0.29.0/src/wade/services/implementation_service/batch.py +533 -0
- wade_cli-0.29.0/src/wade/services/implementation_service/bootstrap.py +539 -0
- wade_cli-0.0.2/src/wade/services/work_service.py → wade_cli-0.29.0/src/wade/services/implementation_service/core.py +1213 -641
- wade_cli-0.29.0/src/wade/services/implementation_service/usage_tracking.py +336 -0
- wade_cli-0.29.0/src/wade/services/init_service.py +2748 -0
- wade_cli-0.29.0/src/wade/services/knowledge_search.py +232 -0
- wade_cli-0.29.0/src/wade/services/knowledge_service.py +799 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/plan_service.py +339 -130
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/prompt_delivery.py +1 -1
- wade_cli-0.29.0/src/wade/services/review_delegation_service.py +261 -0
- wade_cli-0.29.0/src/wade/services/review_service.py +1152 -0
- wade_cli-0.29.0/src/wade/services/review_settle.py +81 -0
- wade_cli-0.29.0/src/wade/services/smart_start.py +426 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/task_service.py +179 -134
- wade_cli-0.29.0/src/wade/skills/installer.py +461 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/ui/console.py +13 -6
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/ui/prompts.py +14 -0
- wade_cli-0.29.0/src/wade/utils/http.py +96 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/install.py +17 -4
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/process.py +45 -28
- wade_cli-0.29.0/src/wade/utils/terminal.py +555 -0
- wade_cli-0.29.0/src/wade/utils/token_usage_markdown.py +105 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/update_check.py +3 -3
- {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/agents-pointer.md +3 -3
- wade_cli-0.29.0/templates/prompts/implement-context.md +19 -0
- wade_cli-0.29.0/templates/prompts/plan-session.md +58 -0
- wade_cli-0.29.0/templates/prompts/review-batch.md +20 -0
- wade_cli-0.29.0/templates/prompts/review-code.md +14 -0
- wade_cli-0.29.0/templates/prompts/review-plan.md +14 -0
- wade_cli-0.29.0/templates/prompts/review-pr-comments.md +23 -0
- wade_cli-0.29.0/templates/setup-worktree.sh.example +41 -0
- wade_cli-0.29.0/templates/skills/_partials/review-enforcement-rule.md +8 -0
- wade_cli-0.29.0/templates/skills/_partials/review-implementation-closing-step.md +24 -0
- wade_cli-0.29.0/templates/skills/_partials/review-plan-step.md +17 -0
- wade_cli-0.29.0/templates/skills/_partials/user-interaction.md +5 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/skills/deps/SKILL.md +1 -1
- wade_cli-0.29.0/templates/skills/implementation-session/SKILL.md +341 -0
- wade_cli-0.29.0/templates/skills/knowledge/SKILL.md +145 -0
- wade_cli-0.29.0/templates/skills/plan-session/SKILL.md +176 -0
- wade_cli-0.29.0/templates/skills/review-pr-comments-session/SKILL.md +247 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/skills/task/SKILL.md +18 -58
- {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/skills/task/examples.md +6 -6
- {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/skills/task/plan-format.md +7 -7
- {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/statusline-command.sh +41 -61
- wade_cli-0.29.0/tests/e2e/_support.py +277 -0
- wade_cli-0.29.0/tests/e2e/conftest.py +100 -0
- wade_cli-0.29.0/tests/e2e/mock_gh_script.py +650 -0
- wade_cli-0.29.0/tests/e2e/test_admin_contract.py +67 -0
- wade_cli-0.29.0/tests/e2e/test_check_contract.py +122 -0
- wade_cli-0.29.0/tests/e2e/test_implement_work_done_contract.py +360 -0
- wade_cli-0.29.0/tests/e2e/test_knowledge_contract.py +116 -0
- wade_cli-0.29.0/tests/e2e/test_mock_gh_contract.py +52 -0
- wade_cli-0.29.0/tests/e2e/test_plan_contract.py +199 -0
- wade_cli-0.29.0/tests/e2e/test_review_contract.py +909 -0
- wade_cli-0.29.0/tests/e2e/test_smart_start_contract.py +203 -0
- wade_cli-0.29.0/tests/e2e/test_task_contract.py +335 -0
- wade_cli-0.29.0/tests/e2e/test_work_sync_list_contract.py +221 -0
- wade_cli-0.29.0/tests/fixtures/live/taskr_header_hi_body.md +17 -0
- wade_cli-0.29.0/tests/fixtures/live/taskr_header_howdy_body.md +17 -0
- wade_cli-0.29.0/tests/integration/test_autostash.py +261 -0
- wade_cli-0.29.0/tests/integration/test_check.py +80 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/integration/test_git.py +5 -1
- wade_cli-0.0.2/tests/integration/test_work_lifecycle.py → wade_cli-0.29.0/tests/integration/test_implementation_lifecycle.py +15 -14
- wade_cli-0.29.0/tests/integration/test_init.py +73 -0
- wade_cli-0.29.0/tests/integration/test_knowledge.py +276 -0
- wade_cli-0.29.0/tests/integration/test_markdown_provider.py +199 -0
- wade_cli-0.29.0/tests/integration/test_skill_install.py +352 -0
- wade_cli-0.29.0/tests/live/test_wade_live_ai.py +88 -0
- wade_cli-0.29.0/tests/live/test_wade_live_ai_taskr.py +502 -0
- wade_cli-0.29.0/tests/live/test_wade_live_gh.py +354 -0
- wade_cli-0.29.0/tests/test_cli_basics.py +291 -0
- wade_cli-0.29.0/tests/unit/conftest.py +20 -0
- wade_cli-0.29.0/tests/unit/test_cli/test_done_review_hint.py +189 -0
- wade_cli-0.29.0/tests/unit/test_cli/test_knowledge_cli.py +487 -0
- wade_cli-0.29.0/tests/unit/test_cli/test_review_cli.py +524 -0
- wade_cli-0.29.0/tests/unit/test_cli/test_session_subapps.py +225 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_cli/test_shell_init.py +37 -4
- wade_cli-0.29.0/tests/unit/test_cli/test_task_cli.py +66 -0
- wade_cli-0.29.0/tests/unit/test_cli/test_work_ai_flags.py +39 -0
- wade_cli-0.29.0/tests/unit/test_cli/test_work_cli.py +113 -0
- wade_cli-0.29.0/tests/unit/test_config/test_loader.py +333 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_config/test_migrations.py +81 -1
- wade_cli-0.29.0/tests/unit/test_console.py +29 -0
- wade_cli-0.29.0/tests/unit/test_effort.py +426 -0
- wade_cli-0.29.0/tests/unit/test_git/test_detached_worktree.py +125 -0
- wade_cli-0.29.0/tests/unit/test_git/test_pr_base.py +84 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/test_repo.py +71 -1
- wade_cli-0.29.0/tests/unit/test_hooks/test_plan_write_guard.py +276 -0
- wade_cli-0.29.0/tests/unit/test_hooks/test_worktree_guard.py +250 -0
- wade_cli-0.29.0/tests/unit/test_models/test_batch.py +85 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_models/test_config_models.py +42 -6
- wade_cli-0.29.0/tests/unit/test_models/test_delegation.py +90 -0
- wade_cli-0.29.0/tests/unit/test_models/test_review.py +927 -0
- wade_cli-0.29.0/tests/unit/test_models/test_task_models.py +282 -0
- wade_cli-0.29.0/tests/unit/test_providers/__init__.py +0 -0
- wade_cli-0.29.0/tests/unit/test_providers/test_clickup.py +542 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_providers/test_github.py +177 -107
- wade_cli-0.29.0/tests/unit/test_providers/test_github_pr.py +94 -0
- wade_cli-0.29.0/tests/unit/test_providers/test_markdown.py +700 -0
- wade_cli-0.29.0/tests/unit/test_services/test_ai_resolution.py +478 -0
- wade_cli-0.29.0/tests/unit/test_services/test_batch_review_service.py +1011 -0
- wade_cli-0.29.0/tests/unit/test_services/test_bootstrap_allowlist.py +377 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_bootstrap_hook_timeout.py +21 -14
- wade_cli-0.29.0/tests/unit/test_services/test_catchup.py +274 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_check.py +172 -0
- wade_cli-0.29.0/tests/unit/test_services/test_delegation_service.py +312 -0
- wade_cli-0.29.0/tests/unit/test_services/test_deps_service.py +513 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_done_plan_flag.py +48 -31
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_done_via_direct_cleanup.py +49 -29
- wade_cli-0.29.0/tests/unit/test_services/test_implementation_done_sync.py +1554 -0
- wade_cli-0.29.0/tests/unit/test_services/test_implementation_service.py +2167 -0
- wade_cli-0.29.0/tests/unit/test_services/test_implementation_service_resume.py +43 -0
- wade_cli-0.29.0/tests/unit/test_services/test_init.py +2541 -0
- wade_cli-0.29.0/tests/unit/test_services/test_knowledge_search.py +153 -0
- wade_cli-0.29.0/tests/unit/test_services/test_knowledge_service.py +1386 -0
- wade_cli-0.29.0/tests/unit/test_services/test_plan_service.py +903 -0
- wade_cli-0.29.0/tests/unit/test_services/test_poll_for_reviews.py +822 -0
- wade_cli-0.29.0/tests/unit/test_services/test_post_implementation_lifecycle.py +439 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_pr_summary_path.py +9 -9
- wade_cli-0.29.0/tests/unit/test_services/test_preserve_session_data.py +237 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_prompt_delivery.py +2 -1
- wade_cli-0.29.0/tests/unit/test_services/test_review_delegation_service.py +717 -0
- wade_cli-0.29.0/tests/unit/test_services/test_review_service.py +1990 -0
- wade_cli-0.29.0/tests/unit/test_services/test_smart_start.py +739 -0
- wade_cli-0.29.0/tests/unit/test_services/test_smart_start_resume.py +410 -0
- wade_cli-0.29.0/tests/unit/test_services/test_sync_base_branch.py +115 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_task_service.py +102 -18
- wade_cli-0.29.0/tests/unit/test_services/test_tracked_managed_files.py +348 -0
- wade_cli-0.29.0/tests/unit/test_services/test_worktree_gitignore.py +247 -0
- wade_cli-0.29.0/tests/unit/test_skills/test_managed_gitignore.py +74 -0
- wade_cli-0.29.0/tests/unit/test_utils/test_http.py +164 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_install.py +59 -9
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_process.py +36 -0
- wade_cli-0.29.0/tests/unit/test_utils/test_terminal.py +79 -0
- wade_cli-0.29.0/tests/unit/test_utils/test_terminal_launch.py +513 -0
- wade_cli-0.29.0/tests/unit/test_yolo.py +642 -0
- wade_cli-0.0.2/.claude/settings.local.json +0 -37
- wade_cli-0.0.2/.github/workflows/publish.yml +0 -17
- wade_cli-0.0.2/.github/workflows/release.yml +0 -33
- wade_cli-0.0.2/CHANGELOG.md +0 -9
- wade_cli-0.0.2/CLAUDE.md +0 -1
- wade_cli-0.0.2/Dockerfile +0 -37
- wade_cli-0.0.2/docker-compose.yml +0 -42
- wade_cli-0.0.2/docs/dev/testing.md +0 -121
- wade_cli-0.0.2/scripts/e2e_smoke.sh +0 -216
- wade_cli-0.0.2/scripts/probe_models.py +0 -344
- wade_cli-0.0.2/scripts/setup-release.sh +0 -187
- wade_cli-0.0.2/src/wade/ai_tools/__init__.py +0 -16
- wade_cli-0.0.2/src/wade/ai_tools/antigravity.py +0 -54
- wade_cli-0.0.2/src/wade/ai_tools/base.py +0 -280
- wade_cli-0.0.2/src/wade/ai_tools/claude.py +0 -77
- wade_cli-0.0.2/src/wade/ai_tools/codex.py +0 -53
- wade_cli-0.0.2/src/wade/ai_tools/copilot.py +0 -58
- wade_cli-0.0.2/src/wade/ai_tools/gemini.py +0 -45
- wade_cli-0.0.2/src/wade/ai_tools/model_utils.py +0 -49
- wade_cli-0.0.2/src/wade/ai_tools/opencode.py +0 -70
- wade_cli-0.0.2/src/wade/ai_tools/transcript.py +0 -714
- wade_cli-0.0.2/src/wade/ai_tools/vscode.py +0 -53
- wade_cli-0.0.2/src/wade/cli/main.py +0 -224
- wade_cli-0.0.2/src/wade/cli/work.py +0 -244
- wade_cli-0.0.2/src/wade/config/claude_allowlist.py +0 -70
- wade_cli-0.0.2/src/wade/config/defaults.py +0 -54
- wade_cli-0.0.2/src/wade/data/__init__.py +0 -18
- wade_cli-0.0.2/src/wade/data/models.json +0 -128
- wade_cli-0.0.2/src/wade/models/ai.py +0 -89
- wade_cli-0.0.2/src/wade/providers/__init__.py +0 -6
- wade_cli-0.0.2/src/wade/providers/github.py +0 -511
- wade_cli-0.0.2/src/wade/providers/registry.py +0 -24
- wade_cli-0.0.2/src/wade/services/ai_resolution.py +0 -93
- wade_cli-0.0.2/src/wade/services/init_service.py +0 -1317
- wade_cli-0.0.2/src/wade/skills/installer.py +0 -234
- wade_cli-0.0.2/src/wade/utils/terminal.py +0 -281
- wade_cli-0.0.2/templates/prompts/deps-interactive.md +0 -2
- wade_cli-0.0.2/templates/prompts/plan-session.md +0 -42
- wade_cli-0.0.2/templates/prompts/work-context.md +0 -9
- wade_cli-0.0.2/templates/skills/plan-session/SKILL.md +0 -106
- wade_cli-0.0.2/templates/skills/work-session/SKILL.md +0 -184
- wade_cli-0.0.2/tests/e2e/test_live_workflow.py +0 -161
- wade_cli-0.0.2/tests/e2e/test_workflow_chain.py +0 -572
- wade_cli-0.0.2/tests/integration/test_check.py +0 -45
- wade_cli-0.0.2/tests/integration/test_init.py +0 -49
- wade_cli-0.0.2/tests/integration/test_skill_install.py +0 -60
- wade_cli-0.0.2/tests/live/test_gh_integration.py +0 -60
- wade_cli-0.0.2/tests/test_cli_basics.py +0 -112
- wade_cli-0.0.2/tests/unit/test_ai_tools/__init__.py +0 -1
- wade_cli-0.0.2/tests/unit/test_ai_tools/test_base_registry.py +0 -243
- wade_cli-0.0.2/tests/unit/test_ai_tools/test_model_registry.py +0 -58
- wade_cli-0.0.2/tests/unit/test_cli/test_work_ai_flags.py +0 -39
- wade_cli-0.0.2/tests/unit/test_config/test_claude_allowlist.py +0 -227
- wade_cli-0.0.2/tests/unit/test_config/test_loader.py +0 -172
- wade_cli-0.0.2/tests/unit/test_models/test_ai_tools.py +0 -289
- wade_cli-0.0.2/tests/unit/test_models/test_task_models.py +0 -122
- wade_cli-0.0.2/tests/unit/test_providers/test_github_pr.py +0 -58
- wade_cli-0.0.2/tests/unit/test_services/test_deps_service.py +0 -368
- wade_cli-0.0.2/tests/unit/test_services/test_init.py +0 -821
- wade_cli-0.0.2/tests/unit/test_services/test_plan_service.py +0 -472
- wade_cli-0.0.2/tests/unit/test_services/test_post_work_lifecycle.py +0 -408
- wade_cli-0.0.2/tests/unit/test_services/test_work_done_sync.py +0 -873
- wade_cli-0.0.2/tests/unit/test_services/test_work_service.py +0 -759
- wade_cli-0.0.2/tests/unit/test_transcript/__init__.py +0 -1
- wade_cli-0.0.2/tests/unit/test_transcript/test_parser.py +0 -632
- wade_cli-0.0.2/tests/unit/test_utils/test_terminal.py +0 -37
- wade_cli-0.0.2/tests/unit/test_utils/test_terminal_launch.py +0 -273
- {wade_cli-0.0.2 → wade_cli-0.29.0}/assets/wade.png +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/auto_version.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/changelog.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/check-all.sh +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/check.sh +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/fmt.sh +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/hooks/pre-push +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/install-hooks.sh +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/scripts/probe_models.sh +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/__main__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/cli/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/config/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/config/schema.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/db/engine.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/git/branch.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/logging/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/logging/context.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/logging/setup.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/models/deps.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/models/events.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/services/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/skills/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/skills/pointer.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/ui/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/clipboard.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/markdown.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/src/wade/utils/slug.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/templates/prompts/deps-analysis.md +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/conftest.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/e2e/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/fixtures/transcripts/claude_session.txt +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/fixtures/transcripts/codex_session.txt +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/fixtures/transcripts/copilot_session.txt +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/fixtures/transcripts/gemini_session.txt +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/fixtures/transcripts/generic_session.txt +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/integration/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/live/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_cli/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_config/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_config/test_migrations_atomic.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_db/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_db/test_repository_transactions.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/test_branch_slugify.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/test_scaffold_commit.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_git/test_worktree_remove.py +0 -0
- {wade_cli-0.0.2/tests/unit/test_providers → wade_cli-0.29.0/tests/unit/test_hooks}/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_models/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_models/test_db.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_models/test_deps_models.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_models/test_deps_partition.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_services/test_init_shell_integration.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/__init__.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_markdown.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_prompts.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_slug.py +0 -0
- {wade_cli-0.0.2 → wade_cli-0.29.0}/tests/unit/test_utils/test_update_check.py +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: Auto Version Bump
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [closed]
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
version-bump:
|
|
13
|
+
# Only run when the PR was actually merged
|
|
14
|
+
if: github.event.pull_request.merged == true
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- name: Detect bump type
|
|
18
|
+
id: detect
|
|
19
|
+
env:
|
|
20
|
+
COMMIT_MSG: ${{ github.event.pull_request.title }}
|
|
21
|
+
run: |
|
|
22
|
+
MSG="$COMMIT_MSG"
|
|
23
|
+
FIRST_LINE=$(echo "$MSG" | head -n 1)
|
|
24
|
+
|
|
25
|
+
if echo "$MSG" | grep -q 'BREAKING CHANGE'; then
|
|
26
|
+
echo "bump=major" >> "$GITHUB_OUTPUT"
|
|
27
|
+
elif echo "$FIRST_LINE" | grep -qE '^[a-z]+(\(.+\))?!:'; then
|
|
28
|
+
echo "bump=major" >> "$GITHUB_OUTPUT"
|
|
29
|
+
elif echo "$FIRST_LINE" | grep -qE '^(feat|update)(\(.+\))?:'; then
|
|
30
|
+
echo "bump=minor" >> "$GITHUB_OUTPUT"
|
|
31
|
+
elif echo "$FIRST_LINE" | grep -qE '^(fix|docs|refactor|chore|style|perf|test|ci|build|revert)(\(.+\))?:'; then
|
|
32
|
+
echo "bump=patch" >> "$GITHUB_OUTPUT"
|
|
33
|
+
else
|
|
34
|
+
echo "bump=" >> "$GITHUB_OUTPUT"
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
- name: Skip if no conventional commit
|
|
38
|
+
if: steps.detect.outputs.bump == ''
|
|
39
|
+
run: echo "No conventional commit prefix detected — skipping version bump."
|
|
40
|
+
|
|
41
|
+
- uses: actions/checkout@v4
|
|
42
|
+
if: steps.detect.outputs.bump != ''
|
|
43
|
+
with:
|
|
44
|
+
fetch-depth: 0
|
|
45
|
+
|
|
46
|
+
- uses: astral-sh/setup-uv@v3
|
|
47
|
+
if: steps.detect.outputs.bump != ''
|
|
48
|
+
with:
|
|
49
|
+
version: "latest"
|
|
50
|
+
|
|
51
|
+
- name: Set up Python
|
|
52
|
+
if: steps.detect.outputs.bump != ''
|
|
53
|
+
run: uv python install 3.13
|
|
54
|
+
|
|
55
|
+
- name: Install dependencies
|
|
56
|
+
if: steps.detect.outputs.bump != ''
|
|
57
|
+
run: uv sync --all-extras
|
|
58
|
+
|
|
59
|
+
- name: Configure git
|
|
60
|
+
if: steps.detect.outputs.bump != ''
|
|
61
|
+
run: |
|
|
62
|
+
git config user.name "github-actions[bot]"
|
|
63
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
64
|
+
|
|
65
|
+
- name: Bump version
|
|
66
|
+
if: steps.detect.outputs.bump != ''
|
|
67
|
+
run: uv run python scripts/auto_version.py ${{ steps.detect.outputs.bump }}
|
|
68
|
+
|
|
69
|
+
- name: Push commit and tag
|
|
70
|
+
if: steps.detect.outputs.bump != ''
|
|
71
|
+
run: |
|
|
72
|
+
git push
|
|
73
|
+
git push --tags
|
|
@@ -57,33 +57,15 @@ jobs:
|
|
|
57
57
|
git config --global user.name "wade test"
|
|
58
58
|
git config --global init.defaultBranch main
|
|
59
59
|
- name: Run unit tests
|
|
60
|
-
run:
|
|
60
|
+
run: ./scripts/test.sh tests/unit/
|
|
61
61
|
- name: Run integration tests
|
|
62
|
-
run:
|
|
62
|
+
run: ./scripts/test.sh tests/integration/
|
|
63
|
+
- name: Run top-level CLI contract smoke
|
|
64
|
+
run: ./scripts/test.sh tests/test_cli_basics.py
|
|
63
65
|
|
|
64
|
-
|
|
65
|
-
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
66
|
+
e2e_docker:
|
|
66
67
|
runs-on: ubuntu-latest
|
|
67
|
-
needs: [test]
|
|
68
|
-
env:
|
|
69
|
-
RUN_LIVE_GH_TESTS: "1"
|
|
70
|
-
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
|
71
68
|
steps:
|
|
72
69
|
- uses: actions/checkout@v4
|
|
73
|
-
-
|
|
74
|
-
|
|
75
|
-
version: "latest"
|
|
76
|
-
- name: Set up Python
|
|
77
|
-
run: uv python install 3.13
|
|
78
|
-
- name: Install dependencies
|
|
79
|
-
run: uv sync --all-extras
|
|
80
|
-
- name: Install gh CLI
|
|
81
|
-
run: |
|
|
82
|
-
type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
|
|
83
|
-
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
|
|
84
|
-
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
|
|
85
|
-
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
|
|
86
|
-
sudo apt update && sudo apt install gh -y
|
|
87
|
-
- name: Run live tests
|
|
88
|
-
if: env.GH_TOKEN != ''
|
|
89
|
-
run: uv run pytest tests/live/ -v --tb=short
|
|
70
|
+
- name: Run deterministic e2e contract tests in Docker
|
|
71
|
+
run: ./scripts/test-e2e-docker.sh
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: PR Title Lint
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, edited, synchronize, reopened]
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
pull-requests: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
lint-title:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: amannn/action-semantic-pull-request@v5
|
|
16
|
+
env:
|
|
17
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
18
|
+
with:
|
|
19
|
+
types: |
|
|
20
|
+
feat
|
|
21
|
+
fix
|
|
22
|
+
docs
|
|
23
|
+
refactor
|
|
24
|
+
chore
|
|
25
|
+
style
|
|
26
|
+
perf
|
|
27
|
+
test
|
|
28
|
+
ci
|
|
29
|
+
build
|
|
30
|
+
revert
|
|
31
|
+
update
|
|
@@ -25,8 +25,17 @@ env/
|
|
|
25
25
|
htmlcov/
|
|
26
26
|
.mypy_cache/
|
|
27
27
|
|
|
28
|
-
#
|
|
29
|
-
.
|
|
28
|
+
# AI tool directories (wade-managed — never committed in this repo)
|
|
29
|
+
.agents/
|
|
30
|
+
.claude/
|
|
31
|
+
.copilot/
|
|
32
|
+
.cursor/
|
|
33
|
+
.gemini/
|
|
34
|
+
.github/hooks/
|
|
35
|
+
.github/skills
|
|
36
|
+
CLAUDE.md
|
|
37
|
+
PLAN.md
|
|
38
|
+
PR-SUMMARY.md
|
|
30
39
|
|
|
31
40
|
# OS
|
|
32
41
|
.DS_Store
|
|
@@ -35,8 +44,5 @@ Thumbs.db
|
|
|
35
44
|
# uv
|
|
36
45
|
uv.lock
|
|
37
46
|
|
|
38
|
-
# Temporary commit message file (agents use this to avoid rewriting on hook retries)
|
|
39
|
-
.commit-msg
|
|
40
|
-
|
|
41
47
|
# Local archive (pre-reset export)
|
|
42
48
|
archive/
|
|
@@ -6,22 +6,14 @@ repos:
|
|
|
6
6
|
args: [--fix]
|
|
7
7
|
- id: ruff-format
|
|
8
8
|
|
|
9
|
-
- repo:
|
|
10
|
-
rev: v1.15.0
|
|
9
|
+
- repo: local
|
|
11
10
|
hooks:
|
|
12
11
|
- id: mypy
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- pydantic>=2.0
|
|
17
|
-
- pydantic-settings>=2.0
|
|
18
|
-
- sqlmodel>=0.0.16
|
|
19
|
-
- pyyaml>=6.0
|
|
20
|
-
- rich>=13.0
|
|
21
|
-
- structlog>=24.0
|
|
22
|
-
- types-PyYAML>=6.0
|
|
12
|
+
name: mypy
|
|
13
|
+
language: system
|
|
14
|
+
entry: uv run mypy --strict src/
|
|
23
15
|
pass_filenames: false
|
|
24
|
-
|
|
16
|
+
always_run: true
|
|
25
17
|
|
|
26
18
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
27
19
|
rev: v5.0.0
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
project:
|
|
3
|
+
main_branch: main
|
|
4
|
+
issue_label: feature-plan
|
|
5
|
+
worktrees_dir: ../.worktrees
|
|
6
|
+
branch_prefix: feat
|
|
7
|
+
merge_strategy: PR
|
|
8
|
+
ai:
|
|
9
|
+
default_tool: claude
|
|
10
|
+
default_model: claude-sonnet-4.6
|
|
11
|
+
effort: max
|
|
12
|
+
plan:
|
|
13
|
+
tool: claude
|
|
14
|
+
model: claude-opus-4.7
|
|
15
|
+
effort: xhigh
|
|
16
|
+
yolo: true
|
|
17
|
+
deps:
|
|
18
|
+
tool: copilot
|
|
19
|
+
model: claude-sonnet-4.6
|
|
20
|
+
mode: headless
|
|
21
|
+
yolo: false
|
|
22
|
+
review_plan:
|
|
23
|
+
tool: copilot
|
|
24
|
+
model: claude-sonnet-4.6
|
|
25
|
+
mode: headless
|
|
26
|
+
enabled: true
|
|
27
|
+
yolo: false
|
|
28
|
+
review_implementation:
|
|
29
|
+
tool: copilot
|
|
30
|
+
model: claude-sonnet-4.6
|
|
31
|
+
mode: headless
|
|
32
|
+
enabled: true
|
|
33
|
+
yolo: false
|
|
34
|
+
review_batch:
|
|
35
|
+
tool: copilot
|
|
36
|
+
model: claude-sonnet-4.6
|
|
37
|
+
mode: interactive
|
|
38
|
+
enabled: true
|
|
39
|
+
yolo: true
|
|
40
|
+
yolo: true
|
|
41
|
+
models:
|
|
42
|
+
claude:
|
|
43
|
+
easy:
|
|
44
|
+
model: claude-sonnet-4.6
|
|
45
|
+
effort: xhigh
|
|
46
|
+
medium:
|
|
47
|
+
model: claude-sonnet-4.6
|
|
48
|
+
effort: max
|
|
49
|
+
complex:
|
|
50
|
+
model: claude-opus-4.7
|
|
51
|
+
effort: high
|
|
52
|
+
very_complex:
|
|
53
|
+
model: claude-opus-4.7
|
|
54
|
+
effort: xhigh
|
|
55
|
+
provider:
|
|
56
|
+
name: github
|
|
57
|
+
knowledge:
|
|
58
|
+
enabled: true
|
|
59
|
+
path: KNOWLEDGE.md
|
|
60
|
+
hooks:
|
|
61
|
+
post_worktree_create: scripts/setup-worktree.sh
|
|
62
|
+
copy_to_worktree:
|
|
63
|
+
- .env
|
|
64
|
+
- .wade.yml
|
|
65
|
+
- KNOWLEDGE.md
|
|
66
|
+
- KNOWLEDGE.ratings.yml
|
|
@@ -31,6 +31,8 @@ Two distinct worlds interact in this codebase. Always be clear which one you are
|
|
|
31
31
|
|--------|---------|
|
|
32
32
|
| `./scripts/test.sh` | Run all tests (excludes live) |
|
|
33
33
|
| `./scripts/test.sh tests/unit/` | Unit tests only |
|
|
34
|
+
| `./scripts/test-e2e.sh` | Deterministic E2E contract tests (host lane) |
|
|
35
|
+
| `./scripts/test-e2e-docker.sh` | Deterministic E2E contract tests in Docker (CI-equivalent) |
|
|
34
36
|
| `./scripts/check.sh` | Lint + type-check (both) |
|
|
35
37
|
| `./scripts/check.sh --lint` | Lint + format check only |
|
|
36
38
|
| `./scripts/check.sh --types` | Type check (strict mypy) only |
|
|
@@ -39,7 +41,7 @@ Two distinct worlds interact in this codebase. Always be clear which one you are
|
|
|
39
41
|
|
|
40
42
|
```bash
|
|
41
43
|
uv pip install -e ".[dev]" # Install for development
|
|
42
|
-
python scripts/auto_version.py patch # Version bump (patch/minor/major)
|
|
44
|
+
uv run python scripts/auto_version.py patch # Version bump (patch/minor/major)
|
|
43
45
|
|
|
44
46
|
# Version bumps MUST be done with the script above. NEVER bump pyproject.toml
|
|
45
47
|
# manually, as the script generates CHANGELOG.md and git tags automatically.
|
|
@@ -68,7 +70,7 @@ CLI modules are thin dispatch — they parse flags via Typer, then call service
|
|
|
68
70
|
### Key Design Patterns
|
|
69
71
|
|
|
70
72
|
- **AI Tool Self-Registration**: `AbstractAITool.__init_subclass__` auto-registers adapters. Adding a new AI tool = one file, one class.
|
|
71
|
-
- **Provider Abstraction**: `AbstractTaskProvider` ABC with pluggable backends (
|
|
73
|
+
- **Provider Abstraction**: `AbstractTaskProvider` ABC with pluggable backends (GitHub via `gh` CLI, ClickUp via REST API, Markdown via a single central file). Non-GitHub providers compose `GitHubPRDelegateMixin` so PR-review APIs still flow through `gh`.
|
|
72
74
|
- **Prompts as .md Templates**: All AI prompts live in `templates/prompts/`, not inline strings.
|
|
73
75
|
- **Synchronous Only**: No asyncio. Process-level parallelism via multiple terminals.
|
|
74
76
|
- **Pydantic Everywhere**: All data structures are Pydantic `BaseModel` subclasses, not dicts.
|
|
@@ -108,7 +110,7 @@ When developing WADE, **only touch the left column**. Always edit `templates/ski
|
|
|
108
110
|
- **Functions**: `snake_case` — `_` prefix for private helpers
|
|
109
111
|
- **Constants**: `UPPER_SNAKE_CASE`
|
|
110
112
|
- **Enums**: `StrEnum` for string-valued enums
|
|
111
|
-
- **CLI commands**: top-level commands (`wade plan
|
|
113
|
+
- **CLI commands**: top-level commands (`wade plan`, `wade implement`)
|
|
112
114
|
|
|
113
115
|
### Commits
|
|
114
116
|
|
|
@@ -116,33 +118,6 @@ Use [Conventional Commits](https://www.conventionalcommits.org/):
|
|
|
116
118
|
`feat:` (minor), `fix:` (patch), `docs:` (patch), `refactor:` (patch),
|
|
117
119
|
`test:` (patch), `chore:` (patch). Breaking changes (`feat!:`) -> major.
|
|
118
120
|
|
|
119
|
-
**Before every commit — mandatory sequence (Python changes only):**
|
|
120
|
-
|
|
121
|
-
> Skip this if your commit touches only non-Python files (e.g. `.md`, `.gitignore`, `templates/`).
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
./scripts/fmt.sh # auto-fix formatting in-place
|
|
125
|
-
./scripts/check.sh --lint # verify lint passes — fix any remaining errors before proceeding
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
**Commit using a message file** (handles pre-commit hook retries without rewriting the message):
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
# Write message once
|
|
132
|
-
cat > .commit-msg << 'EOF'
|
|
133
|
-
feat: your message here
|
|
134
|
-
EOF
|
|
135
|
-
|
|
136
|
-
git add <files>
|
|
137
|
-
git commit -F .commit-msg
|
|
138
|
-
|
|
139
|
-
# If hooks auto-modified files, just re-add and retry — same file:
|
|
140
|
-
git add <auto-modified-files>
|
|
141
|
-
git commit -F .commit-msg
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
`.commit-msg` is gitignored — never committed.
|
|
145
|
-
|
|
146
121
|
## Change Checklist
|
|
147
122
|
|
|
148
123
|
Before considering any work complete:
|
|
@@ -151,7 +126,7 @@ Before considering any work complete:
|
|
|
151
126
|
- [ ] **Types + Lint** — `./scripts/check.sh` passes (or run both at once: `./scripts/check-all.sh`)
|
|
152
127
|
- [ ] **`AGENTS.md`** — updated if architecture, conventions, or workflow changed
|
|
153
128
|
- [ ] **`README.md`** — updated if user-facing behavior changed
|
|
154
|
-
- [ ] **`templates/skills/`** — updated if agent-facing rules changed (plan-session for planning,
|
|
129
|
+
- [ ] **`templates/skills/`** — updated if agent-facing rules changed (plan-session for planning, implementation-session for implementation, review-pr-comments-session for reviews)
|
|
155
130
|
- [ ] **Commit** — uses conventional-commit prefix
|
|
156
131
|
|
|
157
132
|
> Full 10-item checklist, documentation rules, feedback loop, and correction-driven docs: see `docs/dev/documentation-policies.md`
|
|
@@ -167,17 +142,3 @@ Read these on-demand when working in a specific area:
|
|
|
167
142
|
| Writing or running tests | `docs/dev/testing.md` |
|
|
168
143
|
| Working on skills, pointer system, or `wade init` | `docs/dev/skills-system.md` |
|
|
169
144
|
| Updating documentation policies | `docs/dev/documentation-policies.md` |
|
|
170
|
-
|
|
171
|
-
<!-- wade:pointer:start -->
|
|
172
|
-
## Git Workflow
|
|
173
|
-
|
|
174
|
-
**First action every session** — read the skill referenced in your clipboard
|
|
175
|
-
prompt for full session rules.
|
|
176
|
-
|
|
177
|
-
Critical rules you must always follow:
|
|
178
|
-
|
|
179
|
-
1. Never create GitHub Issues via `gh issue create` — use `wade new-task`
|
|
180
|
-
or read @.claude/skills/task/SKILL.md
|
|
181
|
-
2. Never create PRs manually (`gh pr create`) or push branches directly — use
|
|
182
|
-
`wade work done`
|
|
183
|
-
<!-- wade:pointer:end -->
|