5.3 KiB
Raw Blame History

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.