diff --git a/docs/retro/2026-10-11-claude-md-addresses.md b/docs/retro/2026-10-11-claude-md-addresses.md index 092b713..c1632fd 100644 --- a/docs/retro/2026-10-11-claude-md-addresses.md +++ b/docs/retro/2026-10-11-claude-md-addresses.md @@ -30,4 +30,6 @@ | Маркировка → таблица в финальном отчёте, deferred в PR и follow-up | `roles/dev.md` → Маркировка | | Стиль → не сжимать, caveman по команде | `global/CLAUDE.md` → Стиль | +Правка финального ревью (I-1): в разделе «Роль» формулировка «Процесс и чеклисты роли — в её файле» сокращена до «Процесс роли — в `~/.claude/roles/.md`» (ради лимита 3 КБ), добавлено правило для сабагентов; ссылка «Подробности — в роли dev» стала полным путём. + Новое, чего не было: раздел «Роль» (спека 4), раздел «Память» (спека 7.1), запрет обхода хуков (ретро, `feedback-no-harness-bypass`), `cd` при фоновом контроллере (RT-2), абсолютные пути worktree, trailer коммита (RT-9), предусловия окружения (RT-8). diff --git a/global/CLAUDE.md b/global/CLAUDE.md index 6467a63..04ccd7a 100644 --- a/global/CLAUDE.md +++ b/global/CLAUDE.md @@ -4,7 +4,7 @@ - Сессия работает в одной из ролей: `dev`, `admin`, `analyst`, `qa`. Правила роли загружает `/role `; новая роль заменяет предыдущую целиком. - Подсказка `[claude-harness] Роль сессии: ` от хука при старте — вызвать `/role ` до первого ответа. - Без подсказки: если роль очевидна из первого сообщения (Jira, Гант, спринт → admin; стенд, прогон, скриншот, макет → qa; ТЗ, OQ, спека, методика → analyst; срез, issue, PR, тест, миграция → dev) — объявить одной строкой «Роль: admin; если не так, скажи» и вызвать `/role`. Иначе — один вопрос с четырьмя вариантами. -- Процесс и чеклисты роли — в её файле, не здесь. +- Процесс роли — в `~/.claude/roles/.md`, не здесь. Сабагент роль не выбирает и `/role` не вызывает; процесс dev — `~/.claude/roles/dev.md`, если промпт велит. ## Хуки и ветки - guard-main блокирует запись на main/master и detached HEAD: работа только в worktree на ветке. require-plan: правки в коде только при плане для ветки или файле `.bounded`. @@ -18,7 +18,7 @@ - В локальную auto-memory — только ловушки этой машины и обвязки и индекс со ссылками на `notes/` направлений. ## Маркировка -- Каждая находка и каждое решение несёт маркер источника (`T.`, `C-n`/`I-n`/`M-n`, `R-n`, `O-n`, `H-n`, `RT-n`) и статус `fixed ` / `deferred` / `rejected <причина>`. Маркер присваивается один раз. Подробности — в роли dev. +- Каждая находка и каждое решение несёт маркер источника (`T.`, `C-n`/`I-n`/`M-n`, `R-n`, `O-n`, `H-n`, `RT-n`) и статус `fixed ` / `deferred` / `rejected <причина>`. Маркер присваивается один раз. Подробности — в `~/.claude/roles/dev.md`. ## Стиль - Отвечать по-русски. Отчёты сабагентов, рулинги и ledger не сжимать; caveman — только по явной команде. diff --git a/roles/dev.md b/roles/dev.md index d5ebbbc..8acde19 100644 --- a/roles/dev.md +++ b/roles/dev.md @@ -11,7 +11,7 @@ - Карта кода — codegraph (MCP). Сервер отвечает по индексу корня основного checkout, код ветки в worktree он не видит: после создания worktree выполнить в нём `codegraph init`, во всех вызовах `codegraph_explore` передавать `projectPath` = абсолютный путь worktree. Implementer перед изменением вызывает `codegraph_explore` по своей области вместо grep/Read. Пустой ответ — один раз отметить в ledger и дальше использовать Read. codegraph обязателен на период замера (решение владельца 11.10.2026); число вызовов считает `/harness-retro`. ### Маршрутизация -- Сообщение `[claude-harness]` в начале сессии — обвязка не подключена: действовать по его инструкции до всего остального. Скрипт `~/.claude/harness/adopt-project.sh` — единственная разрешённая запись на main. +- Сообщение `[claude-harness] В проекте … не подключена обвязка` в начале сессии: действовать по его инструкции до всего остального. Скрипт `~/.claude/harness/adopt-project.sh` — единственная разрешённая запись на main. - Bounded-задача (флаг, фикс, мелкая правка): без OpenSpec change и без плана. Дизайн в чате, затем файл `.bounded` в корне worktree (разрешает правки в коде без плана; в `.gitignore`), TDD, коммит, PR. Если меняется поведение API или схемы — спека в `openspec/specs/` обновляется в том же PR. Перед PR — verification-before-completion. - Architectural-задача: brainstorming пишет спеку не в `docs/superpowers/specs/`, а в `openspec/changes//`. В поле **Spec** плана указывается этот путь. Перед architectural brainstorming прочитать релевантные файлы в `openspec/specs/` и ARCHITECTURE.md, если есть. @@ -29,7 +29,7 @@ 1. `openspec archive ` — всегда отдельным PR (ветка `chore/archive-` из main, `tea pulls create`, merge по команде человека). Прямых коммитов в main нет, исключений нет (решение владельца 11.10.2026). 2. Issue закрывается (`tea issues close `, комментарий со ссылкой на PR) только если все её пункты выполнены. Если PR закрывает часть пунктов — issue остаётся открытой, в неё пишется комментарий: какие маркеры закрыты, каким PR и коммитом. 3. Удалить SDD workspace (`.superpowers/sdd//`). - 4. Удалить ветку фичи на сервере и локально: `git push origin --delete <ветка>` выполняется из worktree на ветке фичи (не из main-checkout), разрешён allow-правилом проекта (`Bash(git push origin --delete:*)` в `.claude/settings.json`, строку даёт `adopt-project.sh`); затем `git branch -D`, `git worktree remove`. Остальные worktree не трогать. Обходы через API Gitea запрещены. + 4. Удалить ветку фичи на сервере и локально: `git push origin --delete <ветка>` выполняется из worktree на ветке фичи (не из main-checkout), разрешён allow-правилом проекта (`Bash(git push origin --delete:*)` в `.claude/settings.json`; строку печатает `adopt-project.sh --workspace`, для обычного репозитория добавить вручную); затем `git branch -D`, `git worktree remove`. Остальные worktree не трогать. Обходы через API Gitea запрещены. 5. Обновить основной checkout: дерево чистое — `git pull --ff-only`; есть незакоммиченные изменения — не трогать, перечислить их в итоговом сообщении. 6. Все находки со статусом `deferred` собрать в одну issue `Follow-ups from #`: маркер, одна строка, откуда взялось. Нет отложенного — issue не создавать. 7. Файл auto-memory задачи, если был, свернуть в строку `registry-closed.md` (issue, PR, follow-up, дата); уроки из него перенести в `notes/` направления. @@ -68,4 +68,5 @@ ## Делегировать - SDD-контроллер (superpowers, фоновый сабагент на sonnet) → исполнение плана; implementer-ы haiku/sonnet, финальное ревью opus. +- В промпт SDD-контроллера и ревьюера ветки включать указание: «прочитай `~/.claude/roles/dev.md` (Исполнение, Завершение, Маркировка) и передавай его своим сабагентам» — сабагенты получают `~/.claude/CLAUDE.md`, но не вывод `/role`. - `briefing` → выжимка строк `brief:` при `/role dev`. diff --git a/tests/test-sizes.sh b/tests/test-sizes.sh index effa3fe..804ea7b 100644 --- a/tests/test-sizes.sh +++ b/tests/test-sizes.sh @@ -9,5 +9,7 @@ assert_grep "политика памяти: auto-memory" 'auto-memory' "$G" assert_grep "маркировка R-n" 'R-n' "$G" assert_grep "codegraph projectPath" 'projectPath' "$G" assert_grep "хук [claude-harness]" '\[claude-harness\]' "$G" +assert_grep "сабагент не вызывает /role" 'Сабагент роль не выбирает и `/role` не вызывает' "$G" +assert_grep "полный путь роли dev" '~/\.claude/roles/dev\.md' "$G" assert_grep "worktree" 'worktree' "$G" assert_file "таблица адресов" "$ROOT/docs/retro/2026-10-11-claude-md-addresses.md"