4.5 KiB
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
- 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. - role-hint как pre-step: на первом пользовательском сообщении —
ключевые слова из AGENTS.md (Jira/Гант/спринт → admin; стенд/прогон/
скриншот/макет → qa; ТЗ/OQ/спека/методика → analyst; срез/issue/PR/
тест/миграция → dev) → инъекция
[dsh-harness] Роль сессии: <r>с указанием вызватьskill role; нет совпадения — инъекция вопроса с четырьмя вариантами. Один раз за сессию. КонфигroleHint: true. Заголовка сессии в DSH нет — сигнал берём из первого сообщения (ровно то правило, что уже написано в AGENTS.md). - 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.
- T2.1/M-2: негативный тест
- Обе инъекции используют общую маркер/видимость-машинерию 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, спека-дельта (capabilitysession-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.