65 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Proposal: dsh-prestep — harness-check и role-hint через agent/pre-step
Issue: #43 (+#62 follow-ups). Источники: роадмап #48 (закрыт), дизайн #69,
AGENTS.md (правило первого сообщения), архив #42 (§6 приёмка).
## Why
У Claude Code два SessionStart-хука: `harness-check.sh` (проект не подключён
→ предложить adopt) и `role-hint.sh` (подсказка роли по заголовку сессии).
В DSH их нет (#43): сессия в неподключённом проекте молча работает без
обвязки, а выбор роли держится только на дисциплине модели (первое правило
AGENTS.md). Плюс три мелких follow-ups из #42 (#62: T2.1 — PATH в негативном
тесте, T3.4 — TDD-порядок в брифах, O-2 — изоляция HOME/DSH_HOME в брифах).
## What Changes
1. **harness-check как pre-step**: один раз за сессию (маркер-дедуп, как у
bootstrap) проверяем, что проект подключён (upward-walk до корня
git-проекта; сигналы — `openspec/`, `.codegraph/`, секция «OpenSpec и
superpowers» в `CLAUDE.md`); нет — неблокирующая DSH-нативная
инъекция со списком отсутствующего и шагами настройки
(`openspec init --tools agents`, `codegraph init`, секция в
`CLAUDE.md`). Без `~/.claude`-путей и CC-adopt-скрипта (D-9).
Конфиг `harnessCheck: true`.
2. **role-hint как pre-step**: на первом пользовательском сообщении —
ключевые слова из AGENTS.md (Jira/Гант/спринт → admin; стенд/прогон/
скриншот/макет → qa; ТЗ/OQ/спека/методика → analyst; срез/issue/PR/
тест/миграция → dev) → инъекция `[claude-harness] Роль сессии: <r>` с
указанием вызвать `skill role`; нет совпадения — инъекция вопроса с
четырьмя вариантами. Один раз за сессию. Конфиг `roleHint: true`.
Заголовка сессии в DSH нет — сигнал берём из первого сообщения
(ровно то правило, что уже написано в AGENTS.md).
3. **Follow-ups #62** (задачами этого же change):
- T2.1/M-2: негативный тест `--check` без openspec — изоляция PATH
вместо фиксированного `bin:/usr/bin:…`;
- T3.4: sdd-skill и шаблоны брифов — «шаг „тест падает“ обязателен до
кода» формулируется жёстче;
- O-2: брифы/рецепты изолируют и HOME, и DSH_HOME; `install.sh`
предупреждает, когда DSH_HOME указывает на существующий каталог при
нестандартном HOME.
4. Обе инъекции используют общую маркер/видимость-машинерию bootstrap
(выносим хелперы, поведение bootstrap не меняется).
## Impact
- Affected: `dsh/bundle/lib/prestep.js` (новое), `dsh/bundle/lib/bootstrap.js`
(рефакторинг хелперов), `dsh/bundle/index.js` (wiring, аддитивно),
`dsh/skills/sdd/SKILL.md`, `dsh/install.sh` (WARN O-2),
`dsh/tests/openspec.test.mjs` (T2.1), тесты prestep, спека-дельта
(capability `session-prestep`), README/PORT.
- Не трогаем: CC-сторону (хуки harness-check.sh/role-hint.sh остаются),
гейты, bootstrap-инъекцию.
- Breaking: нет (обе инъекции — неблокирующие; конфиг отключает).
## Non-goals
HARNESS_AUTO_ADOPT (авто-подключение) — потом, при запросе; порт
`adopt-project.sh` под DSH — отдельная фича (D-9, замечание владельца о
CC-независимости); портирование `briefing` (#45) — отдельно; анализ
заголовка сессии (в DSH его нет).
## Открытые вопросы
Нет — решения в design.md; владелец утверждает через `/approve dsh-prestep design`.