DSH: установка без зависимости от ~/.claude (#49) #64

Merged
aep merged 7 commits from feat/49-dsh-install-source into main 2026-10-24 20:23:43 +03:00
Owner

DSH: установка без зависимости от ~/.claude (#49)

Закрывает install-time зависимость DSH-порта от Claude Code: свежая установка
на машине без ~/.claude больше не оставляет bootstrap пустым.

Issue: #49. Роадмап: #48. Change: openspec/changes/dsh-install-source/
(спека dsh-install, дизайн с решениями D-1…D-6). План:
docs/superpowers/plans/2026-10-24-dsh-install-source.md.

Что изменилось

  • dsh/install.sh --skills: источник superpowers — --superpowers-from <dir> →
    $DSH_SUPERPOWERS_SOURCE → $DSH_HOME/superpowers → legacy-кэш Claude Code
    (с WARN). Принимаются и корень репозитория superpowers, и каталог skills/.
  • Нет источника: FAIL с готовой командой клона, если ~/.dsh/skills пуст;
    WARN и сохранение копий при повторной установке. Локальные скиллы role и
    sdd ставятся в обоих случаях.
  • --check печатает источник superpowers (ok/WARN legacy/WARN нет);
    невалидный явный источник — FAIL.
  • --global: в установленном AGENTS.md пути ролей — ~/.dsh/roles, ни одного
    пути ~/.claude; шапка явно говорит, что проектный CLAUDE.md/AGENTS.md —
    формат инструкций DSH, а не runtime Claude Code. global/CLAUDE.md в
    репозитории не менялся (его читает CC).
  • Bundle: при выборе legacy-пути bootstrap или ролей — одно предупреждение за
    процесс; при ~/.dsh предупреждений нет.

Rulings I made

  • --check на невалидный явный источник возвращает 1 (ошибка конфигурации
    пользователя, а не «источника нет»). Записано в спеку/дизайн по ходу работы.
  • Adapter-строка, называвшая ~/.claude/roles как legacy, переформулирована:
    в установленном файле не остаётся ни одного пути ~/.claude (требование спеки).
  • Баг тестовой фикстуры legacy-кэша (писал skills/skills) исправлен в тесте,
    production не затронут.

Ревью ветки

deepseek-v4-pro, диапазон de58eff..ab458b5: Critical/Important — нет, 5 Minor.
Две находки переоценены по эффекту и закрыты в 4054e13:

  • повреждённый legacy-кэш (без using-superpowers/SKILL.md) принимался и давал
    «copied 0» с кодом 0 → теперь это не источник, установка падает с FAIL;
  • пустой --superpowers-from=/"" молча игнорировался и проваливался на
    legacy → теперь ошибка exit 2.

Отложены (Minor, не входят в этот PR): интеграционный тест предупреждения о
legacy-ролях в index.apply; зависимость --global от python3 (жёсткое
требование, покрыто --check); неудаляемые устаревшие каталоги скиллов
(пре-существующее поведение per-skill замены).

Проверено

  • bash dsh/tests/run.sh → 63/63 (было 57).
  • bash tests/run.sh (CC-контур) → 630 passed, 0 failed.
  • openspec validate dsh-install-source --strict → valid.
  • Temp HOME без ~/.claude: --global --skills --roles --superpowers-from
    → 15 superpowers + 2 локальных скилла + 4 роли; $HOME/.claude не создан;
    prepareBootstrap({home}) → ~/.dsh/skills/using-superpowers/SKILL.md, маркер
    <!-- DSH-HARNESS-BOOTSTRAP:412d797495fc8765 -->.

Осталось человеку

  • Merge PR (по явной команде).
  • Прогнать на своей машине bash dsh/install.sh --global --skills --roles
    (сейчас --check показывает WARN: legacy superpowers source: пиннинга в
    ~/.dsh/superpowers нет, а установленный ~/.dsh/AGENTS.md ещё содержит три
    пути ~/.claude/roles).
  • Fresh-session smoke на машине без ~/.claude (юнит-уровень пройден).

Deferred

  • Удаление legacy-fallback'ов из bundle — после того как все машины переедут на
    ~/.dsh (design D-4).
# DSH: установка без зависимости от ~/.claude (#49) Закрывает install-time зависимость DSH-порта от Claude Code: свежая установка на машине без `~/.claude` больше не оставляет bootstrap пустым. Issue: #49. Роадмап: #48. Change: `openspec/changes/dsh-install-source/` (спека `dsh-install`, дизайн с решениями D-1…D-6). План: `docs/superpowers/plans/2026-10-24-dsh-install-source.md`. ## Что изменилось - `dsh/install.sh --skills`: источник superpowers — `--superpowers-from <dir>` → `$DSH_SUPERPOWERS_SOURCE` → `$DSH_HOME/superpowers` → legacy-кэш Claude Code (с `WARN`). Принимаются и корень репозитория superpowers, и каталог `skills/`. - Нет источника: `FAIL` с готовой командой клона, если `~/.dsh/skills` пуст; `WARN` и сохранение копий при повторной установке. Локальные скиллы `role` и `sdd` ставятся в обоих случаях. - `--check` печатает источник superpowers (`ok`/`WARN legacy`/`WARN нет`); невалидный явный источник — `FAIL`. - `--global`: в установленном `AGENTS.md` пути ролей — `~/.dsh/roles`, ни одного пути `~/.claude`; шапка явно говорит, что проектный `CLAUDE.md`/`AGENTS.md` — формат инструкций DSH, а не runtime Claude Code. `global/CLAUDE.md` в репозитории не менялся (его читает CC). - Bundle: при выборе legacy-пути bootstrap или ролей — одно предупреждение за процесс; при `~/.dsh` предупреждений нет. ## Rulings I made - `--check` на невалидный явный источник возвращает 1 (ошибка конфигурации пользователя, а не «источника нет»). Записано в спеку/дизайн по ходу работы. - Adapter-строка, называвшая `~/.claude/roles` как legacy, переформулирована: в установленном файле не остаётся ни одного пути `~/.claude` (требование спеки). - Баг тестовой фикстуры legacy-кэша (писал `skills/skills`) исправлен в тесте, production не затронут. ## Ревью ветки `deepseek-v4-pro`, диапазон `de58eff..ab458b5`: Critical/Important — нет, 5 Minor. Две находки переоценены по эффекту и закрыты в `4054e13`: - повреждённый legacy-кэш (без `using-superpowers/SKILL.md`) принимался и давал «copied 0» с кодом 0 → теперь это не источник, установка падает с `FAIL`; - пустой `--superpowers-from=`/`""` молча игнорировался и проваливался на legacy → теперь ошибка `exit 2`. Отложены (Minor, не входят в этот PR): интеграционный тест предупреждения о legacy-ролях в `index.apply`; зависимость `--global` от python3 (жёсткое требование, покрыто `--check`); неудаляемые устаревшие каталоги скиллов (пре-существующее поведение per-skill замены). ## Проверено - `bash dsh/tests/run.sh` → 63/63 (было 57). - `bash tests/run.sh` (CC-контур) → 630 passed, 0 failed. - `openspec validate dsh-install-source --strict` → valid. - Temp `HOME` без `~/.claude`: `--global --skills --roles --superpowers-from` → 15 superpowers + 2 локальных скилла + 4 роли; `$HOME/.claude` не создан; `prepareBootstrap({home})` → `~/.dsh/skills/using-superpowers/SKILL.md`, маркер `<!-- DSH-HARNESS-BOOTSTRAP:412d797495fc8765 -->`. ## Осталось человеку - Merge PR (по явной команде). - Прогнать на своей машине `bash dsh/install.sh --global --skills --roles` (сейчас `--check` показывает `WARN: legacy superpowers source`: пиннинга в `~/.dsh/superpowers` нет, а установленный `~/.dsh/AGENTS.md` ещё содержит три пути `~/.claude/roles`). - Fresh-session smoke на машине без `~/.claude` (юнит-уровень пройден). ## Deferred - Удаление legacy-fallback'ов из bundle — после того как все машины переедут на `~/.dsh` (design D-4).
aep added 7 commits 2026-10-24 20:20:52 +03:00
aep merged commit 9cae7e1234 into main 2026-10-24 20:23:43 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: aep/claude-harness#64
No description provided.