69 lines
5.3 KiB
Markdown
69 lines
5.3 KiB
Markdown
# Proposal: установка DSH без зависимости от ~/.claude
|
||
|
||
Issue: #49 (роадмап порта — #48). Источники:
|
||
- `dsh/PORT.md`, разделы 3 (deferred), 5 (install), 7 (risks: «`~/.claude`
|
||
dependence»);
|
||
- issue #37/#38: runtime-отвязка skills и roles от `~/.claude` — сделана;
|
||
- ответ владельца 24.10.2026 на вопрос о источнике superpowers: «нормально так»
|
||
(явный путь/`DSH_SUPERPOWERS_SOURCE`, без вендоринга в репозиторий).
|
||
|
||
## Why
|
||
|
||
После #37/#38 DSH не зависит от `~/.claude` в runtime: bootstrap читает
|
||
`~/.dsh/skills`, роли — `~/.dsh/roles`, `--skills --roles` копируют файлы.
|
||
Осталась зависимость **на этапе установки**: `dsh/install.sh --skills` берёт
|
||
superpowers только из кэша плагина Claude Code
|
||
(`~/.claude/plugins/cache/claude-plugins-official/superpowers/*/skills`).
|
||
|
||
Практические следствия:
|
||
|
||
- на машине без Claude Code свежая установка не может поставить superpowers:
|
||
`--skills` печатает `WARN` и молча ничего не копирует, bootstrap остаётся
|
||
пустым (`superpowers bootstrap skill not found; skipping injection`);
|
||
- после отката/удаления Claude Code установка воспроизводится только из уже
|
||
лежащих копий в `~/.dsh/skills` — то есть «повторяемая установка» существует
|
||
лишь пока никто не удалил `~/.dsh`;
|
||
- acceptance порта (#48, DoD) требует пройти полный цикл в чистом проекте, где
|
||
CC-харнес не участвует, — сейчас первый шаг цикла упирается в `~/.claude`;
|
||
- в установленных инструкциях `~/.dsh/AGENTS.md` остались пути
|
||
`~/.claude/roles/<r>.md` (унаследованы из `global/CLAUDE.md`, общего с CC):
|
||
adapter и skill `role` их перекрывают, но текст путает агента и человека.
|
||
|
||
## What Changes
|
||
|
||
- **Источник superpowers задаётся при установке.** `dsh/install.sh --skills`
|
||
разрешает источник в порядке: `--superpowers-from <dir>` → `DSH_SUPERPOWERS_SOURCE`
|
||
→ пиннинг `$DSH_HOME/superpowers/skills` → (legacy) кэш Claude Code →
|
||
(legacy) `~/.claude/skills`. Явно заданный, но невалидный источник — `FAIL`,
|
||
а не тихий откат на legacy.
|
||
- **Нет источника — нет тихого WARN.** Если `~/.dsh/skills` уже содержит
|
||
`using-superpowers`, повторный `--skills` предупреждает и сохраняет копии
|
||
(идемпотентность). Если копий нет — `FAIL` с готовой командой
|
||
`git clone … ~/.dsh/superpowers`, код возврата 1. Локальные скиллы обвязки
|
||
(`role`, `sdd`) ставятся в обоих случаях.
|
||
- **`--check` показывает источник.** `ok: superpowers source (<path>)` для
|
||
явного/пиннинга, `WARN: legacy superpowers source` для `~/.claude`,
|
||
`WARN` с подсказкой, когда источника нет.
|
||
- **Legacy-пути остаются fallback'ом с предупреждением.** Runtime-порядок
|
||
`~/.dsh` → `~/.claude` не меняется; bundle один раз за процесс пишет в лог,
|
||
что bootstrap/роли взяты из legacy-источника. Удаление fallback'ов — не эта
|
||
задача (см. design, D-2).
|
||
- **Установленные инструкции DSH не ссылаются на `~/.claude`.** `install_global`
|
||
заменяет в копии `~/.claude/roles` → `~/.dsh/roles` и явно говорит, что
|
||
проектный `CLAUDE.md`/`AGENTS.md` — формат инструкций DSH, а не runtime
|
||
Claude Code. `global/CLAUDE.md` в репозитории не меняется: его читает и CC.
|
||
- **Тесты без DSH runtime.** Чистый temp `HOME` без `~/.claude`: установка с
|
||
`--superpowers-from`, bootstrap с этим HOME, `FAIL`/`WARN` при отсутствии
|
||
источника, legacy-предупреждения, содержимое `AGENTS.md`.
|
||
- **Документация.** `dsh/README.md` (quick start с получением источника,
|
||
known limits), `dsh/PORT.md` (§3, §5, §7, §8).
|
||
|
||
## Non-goals
|
||
|
||
- Вендоринг superpowers в репозиторий обвязки: апстрим живёт своей версией,
|
||
копия в репозитории стареет молча (design, D-1).
|
||
- `git clone` внутри `install.sh`: установка не должна требовать сети.
|
||
- Удаление legacy-fallback'ов из `bootstrap.js`/`index.js`: обратная
|
||
совместимость машин, где `--skills --roles` ещё не перезапускали (D-2).
|
||
- Проектный слой ролей, briefing, harness-check, harness-doctor — свои фазы #48.
|