65 lines
4.5 KiB
Markdown
65 lines
4.5 KiB
Markdown
# 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`.
|