2.9 KiB
2.9 KiB
DSH decouple from ~/.claude — план
Ветка: feat/37-dsh-decouple (issue #37).
Спека/дизайн: dsh/PORT.md.
Цель
Сделать DSH-порт независимым от установки Claude Code: superpowers skills и
роли лежат в ~/.dsh, а ~/.claude используется только как fallback.
Scope
dsh/install.sh: копировать skills (не symlink), добавить--roles, включить роли в--all.dsh/bundle/index.js:resolveRolesDir—~/.dsh/roles→~/.claude/roles→ reporoles/.dsh/bundle/lib/bootstrap.js:~/.dsh/skillsраньше кэша~/.claude.- Тесты: install-копирование, приоритет ролей, приоритет bootstrap.
- README/PORT: новый порядок установки и fallback.
Non-goals
- Проектные роли
<cwd>/.dsh/roles— отдельная задача. - Vendor superpowers в репозиторий; пока копируем из установленного кэша.
- OpenSpec, SDD, briefing.
Задачи
- Task 1: install.sh копирует skills и роли
- Files:
dsh/install.sh --skills:rm -rfdest +cp -Rsource, неln -sfn.--roles:cp$ROOT/roles/*.mdв$DSH_HOME/roles.--allвключает--roles.- Проверка:
bash dsh/install.sh --skills --rolesс tempDSH_HOME.
- Files:
- Task 2: приоритет ~/.dsh/roles
- Files:
dsh/bundle/index.js,dsh/bundle/lib/role.js resolveRolesDir(bundleDir, configured, home):~/.dsh/roles→~/.claude/roles→ repo.role.jsdefaultrolesDir=~/.dsh/roles.- Проверка: unit-тест с temp home, где оба каталога существуют.
- Files:
- Task 3: приоритет ~/.dsh/skills
- Files:
dsh/bundle/lib/bootstrap.js superpowersCandidates: env →~/.dsh/skills→~/.agents/skills→~/.claudecache →~/.claude/skills.- Проверка: unit-тест с temp home, где есть и
.dsh, и.claudecache.
- Files:
- Task 4: тест install.sh
- Files:
dsh/tests/install.test.mjs - Fake superpowers cache в temp
HOME; запуск--skills --roles; проверка, что skill — real directory, роли скопированы; повторный запуск.
- Files:
- Task 5: документация
- Files:
dsh/README.md,dsh/PORT.md --roles, копирование, fallback.
- Files:
- Task 6: прогон и коммит
bash dsh/tests/run.sh— все тесты.bash tests/run.sh— регрессий нет.- Commit, push, PR.
Acceptance
- В temp
HOMEс только~/.dshbootstrap и/role devработают. bash dsh/tests/run.shзелёный.dsh/install.sh --allсоздаёт real copies, не symlinks.