Роли и память, часть 1: слой ролей обвязки (role-hint, /role, briefing, link-roles) #4

Merged
aep merged 15 commits from feat/2-roles-and-memory into main 2026-10-12 14:00:18 +03:00
Owner

Часть 1 спеки «Роли и память» (docs/superpowers/specs/2026-10-11-roles-and-memory-design.md, раздел 8): слой ролей обвязки. Часть 2 (проектный слой awp-ca) — отдельный план после merge.

Refs #2 (часть 1 чеклиста). База PR — retro/2026-10-11, потому что ветка ответвлена от неё; после merge #3 перенацелить на main.

Что сделано

  • hooks/role-hint.sh — SessionStart-подсказка роли по session_title; зарегистрирован в settings.hooks.json.
  • roles/{dev,admin,analyst,qa}.md — общие файлы ролей (формат 3.1); dev.md вобрал прежний процесс из global/CLAUDE.md с решениями владельца от 11.10.
  • global/CLAUDE.md ужат до 3058 Б (лимит 3072); таблица адресов абзацев docs/retro/2026-10-11-claude-md-addresses.md.
  • Skill /role <dev|admin|analyst|qa> и агент briefing (sonnet).
  • link-roles.sh — симлинки ролей и агентов в workspace из таблицы | Каталог | Репозиторий | Роль |.
  • Шаблоны project-template/workspace/, project-template/role-repo/; adopt-project.sh --workspace, new-project.sh --workspace --role.
  • doctor.sh: файлы ролей, самотест role-hint, режим workspace, размеры. install.sh ставит всё новое, --check видит.
  • Тесты tests/run.sh: 157 проверок, зелёные. Docs: HARNESS.md «Роли», README, CHANGELOG 0.3.0, CLAUDE.md репозитория.

Spike (Task 1)

memory: project через симлинк каталога .claude/agent-memory/<name> не работает: агент видит память как read-only, MEMORY.md не пишется. Контроль с обычным каталогом работает. Принят запасной вариант 6.5 (notes/agent-memory.md); link-roles симлинки памяти не создаёт. Записано в раздел 11 спеки.

Rulings I made (спека, «Decisions made without discussion», записи 11–18)

  • R-4 (#11). Песочница spike в scratchpad, не в /tmp. Цена ошибки: нет.
  • R-5 (#12). Коммит haiku-исполнителя с trailer Claude Haiku 5.5 исправлен --amend до push. Цена: один переписанный локальный коммит.
  • R-6 (#13). Дефект плана Task 3: grep теста ослаблен до спека .*обновляется в том же PR, текст роли дословный. Цена: чуть слабее проверка.
  • R-7 (#14). Дефект плана Task 5: grep [Бб]ез аргумента. Цена: чуть слабее проверка.
  • R-8 (#15). В Task 10 фразы плана «память через симлинк работает» заменены результатом spike. Отменено R-9.
  • R-9 (#16). По I-2: link-roles.sh не создаёт agent-memory, doctor их не проверяет, шаблоны ссылаются на notes/agent-memory.md. Цена: если симлинк позже заработает, линковку придётся вернуть.
  • R-10 (#17). По I-1: в global/CLAUDE.md правило про сабагентов и путь ~/.claude/roles/dev.md; в dev.md «Делегировать» — контроллер SDD и ревьюер читают dev.md. Цена: ~150 Б бюджета.
  • R-11 (#18). Объём fix-волны: I-1, I-2, M-1, M-2, M-3, M-5, M-7, T6.1, T9.2, T10.1, T10.3, T10.4; M-4 и M-6 — в часть 2.

Финальное ревью (opus)

0 critical, 2 important (I-1, I-2), 7 minor (M-1..M-7); одна fix-волна (6744d40, d288948, 874c6c4), re-review: всё ADDRESSED.

Deferred (в follow-up issue при закрытии)

  • T1.1 причина «симлинк → read-only» подтверждена одним контролем; 6.5 в части 2 как предосторожность
  • T2.1 нет явного теста cc-qa …
  • T3.1 tests/test-roles.sh проверяет cd голой подстрокой
  • T4.1 в таблице адресов нет пометки про убранное «кроме архивации OpenSpec» у adopt-project.sh
  • T4.2 в строке «Новое» нет require-plan/.bounded и «если хук мешает — сказать владельцу»
  • T4.3 / M-4 «Читать на старте» в dev.md: дубль brief:/tea issues ls, строки не подходят для cwd workspace, OQ у analyst не команда (часть 2)
  • T5.2 шаг 2 skill /role зависит от пути auto-memory в системном промпте
  • T6.2 --map не проверяет роль admin|analyst|qa
  • T6.3 чужой/битый симлинк молча заменяется, в шапке не сказано
  • T6.4 ячейки каталога ../x и абсолютные пути не отклоняются
  • T7.1 $NAME в замене sed ломается на / и &
  • T7.2 new-project.sh --role без значения — unbound $2
  • T8.2 tests/test-doctor.sh: проверка workspace слишком слабая
  • T8.3 не покрыта ветка WARN «нет проектного файла роли»
  • T9.1 фильтр ours_ss в install.sh удаляет всю запись SessionStart, если в ней есть наш хук (поведение до ветки)
  • T10.2 notes/agent-memory.md упомянут, шаблона в role-repo нет (часть 2)
  • M-6 правило codegraph «на период замера» и /harness-retro в общем слое dev.md (часть 2)
  • re-review: спека раздел 9 «Проверяется первой» про симлинк; кавычки «dev, admin, analyst или qa» в HARNESS.md

Наблюдения

  • O-1 транскрипты spike остались в ~/.claude/projects/…memprobe-eifo-ws|ctl, удалить руками.
  • O-2 сабагенты ставят trailer своей модели, проверять в каждом коммите.
  • O-3 session_title в SessionStart подтверждён чтением бинарника 2.1.296 (пользовательский заголовок), живой тест — проверка 2 раздела 9.
  • O-4 $0 в skills не верифицирован; codegraph исполнителям не понадобился (bash+markdown).

🤖 Generated with Claude Code

https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt

Часть 1 спеки «Роли и память» (`docs/superpowers/specs/2026-10-11-roles-and-memory-design.md`, раздел 8): слой ролей обвязки. Часть 2 (проектный слой awp-ca) — отдельный план после merge. Refs #2 (часть 1 чеклиста). База PR — `retro/2026-10-11`, потому что ветка ответвлена от неё; после merge #3 перенацелить на `main`. ## Что сделано - `hooks/role-hint.sh` — SessionStart-подсказка роли по `session_title`; зарегистрирован в `settings.hooks.json`. - `roles/{dev,admin,analyst,qa}.md` — общие файлы ролей (формат 3.1); dev.md вобрал прежний процесс из global/CLAUDE.md с решениями владельца от 11.10. - `global/CLAUDE.md` ужат до 3058 Б (лимит 3072); таблица адресов абзацев `docs/retro/2026-10-11-claude-md-addresses.md`. - Skill `/role <dev|admin|analyst|qa>` и агент `briefing` (sonnet). - `link-roles.sh` — симлинки ролей и агентов в workspace из таблицы `| Каталог | Репозиторий | Роль |`. - Шаблоны `project-template/workspace/`, `project-template/role-repo/`; `adopt-project.sh --workspace`, `new-project.sh --workspace --role`. - `doctor.sh`: файлы ролей, самотест role-hint, режим workspace, размеры. `install.sh` ставит всё новое, `--check` видит. - Тесты `tests/run.sh`: 157 проверок, зелёные. Docs: HARNESS.md «Роли», README, CHANGELOG 0.3.0, CLAUDE.md репозитория. ## Spike (Task 1) `memory: project` через симлинк каталога `.claude/agent-memory/<name>` **не работает**: агент видит память как read-only, MEMORY.md не пишется. Контроль с обычным каталогом работает. Принят запасной вариант 6.5 (`notes/agent-memory.md`); link-roles симлинки памяти не создаёт. Записано в раздел 11 спеки. ## Rulings I made (спека, «Decisions made without discussion», записи 11–18) - **R-4 (#11).** Песочница spike в scratchpad, не в `/tmp`. Цена ошибки: нет. - **R-5 (#12).** Коммит haiku-исполнителя с trailer `Claude Haiku 5.5` исправлен `--amend` до push. Цена: один переписанный локальный коммит. - **R-6 (#13).** Дефект плана Task 3: grep теста ослаблен до `спека .*обновляется в том же PR`, текст роли дословный. Цена: чуть слабее проверка. - **R-7 (#14).** Дефект плана Task 5: grep `[Бб]ез аргумента`. Цена: чуть слабее проверка. - **R-8 (#15).** В Task 10 фразы плана «память через симлинк работает» заменены результатом spike. Отменено R-9. - **R-9 (#16).** По I-2: link-roles.sh не создаёт `agent-memory`, doctor их не проверяет, шаблоны ссылаются на `notes/agent-memory.md`. Цена: если симлинк позже заработает, линковку придётся вернуть. - **R-10 (#17).** По I-1: в global/CLAUDE.md правило про сабагентов и путь `~/.claude/roles/dev.md`; в dev.md «Делегировать» — контроллер SDD и ревьюер читают dev.md. Цена: ~150 Б бюджета. - **R-11 (#18).** Объём fix-волны: I-1, I-2, M-1, M-2, M-3, M-5, M-7, T6.1, T9.2, T10.1, T10.3, T10.4; M-4 и M-6 — в часть 2. ## Финальное ревью (opus) 0 critical, 2 important (I-1, I-2), 7 minor (M-1..M-7); одна fix-волна (6744d40, d288948, 874c6c4), re-review: всё ADDRESSED. ## Deferred (в follow-up issue при закрытии) - T1.1 причина «симлинк → read-only» подтверждена одним контролем; 6.5 в части 2 как предосторожность - T2.1 нет явного теста `cc-qa …` - T3.1 `tests/test-roles.sh` проверяет `cd` голой подстрокой - T4.1 в таблице адресов нет пометки про убранное «кроме архивации OpenSpec» у adopt-project.sh - T4.2 в строке «Новое» нет require-plan/.bounded и «если хук мешает — сказать владельцу» - T4.3 / M-4 «Читать на старте» в dev.md: дубль `brief:`/`tea issues ls`, строки не подходят для cwd workspace, OQ у analyst не команда (часть 2) - T5.2 шаг 2 skill /role зависит от пути auto-memory в системном промпте - T6.2 `--map` не проверяет роль admin|analyst|qa - T6.3 чужой/битый симлинк молча заменяется, в шапке не сказано - T6.4 ячейки каталога `../x` и абсолютные пути не отклоняются - T7.1 `$NAME` в замене `sed` ломается на `/` и `&` - T7.2 `new-project.sh --role` без значения — unbound `$2` - T8.2 `tests/test-doctor.sh`: проверка `workspace` слишком слабая - T8.3 не покрыта ветка WARN «нет проектного файла роли» - T9.1 фильтр `ours_ss` в install.sh удаляет всю запись SessionStart, если в ней есть наш хук (поведение до ветки) - T10.2 `notes/agent-memory.md` упомянут, шаблона в role-repo нет (часть 2) - M-6 правило codegraph «на период замера» и `/harness-retro` в общем слое dev.md (часть 2) - re-review: спека раздел 9 «Проверяется первой» про симлинк; кавычки «dev, admin, analyst или qa» в HARNESS.md ## Наблюдения - O-1 транскрипты spike остались в `~/.claude/projects/…memprobe-eifo-ws|ctl`, удалить руками. - O-2 сабагенты ставят trailer своей модели, проверять в каждом коммите. - O-3 `session_title` в SessionStart подтверждён чтением бинарника 2.1.296 (пользовательский заголовок), живой тест — проверка 2 раздела 9. - O-4 `$0` в skills не верифицирован; codegraph исполнителям не понадобился (bash+markdown). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
aep added 15 commits 2026-10-11 23:52:47 +03:00
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
link-roles.sh больше не создаёт симлинки agent-memory (спека, раздел 11:
симлинк делает память read-only), doctor не проверяет их; шаблоны
workspace и role-repo описывают запасной вариант 6.5 (notes/agent-memory.md).
В спеке разделы 2, 6.5, 8 получили указатель на раздел 11. Заодно --map
без значения даёт русскую ошибку и exit 2.

Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Сабагенты не получают вывод /role, поэтому глобальный CLAUDE.md задаёт
для них правило и полный путь ~/.claude/roles/dev.md, а роль dev велит
передавать этот файл контроллеру SDD и ревьюеру ветки (I-1). Уточнены
формулировки про [claude-harness] (M-2) и allow-правило push --delete (M-3).

Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
run.sh задаёт HOME во временный каталог на каждый тест и фиксирует
git-идентичность; test-install.sh передаёт HOME и CLAUDE_CONFIG_DIR
inline (M-1, T9.2). doctor.sh распознаёт шапку таблицы с лишними
пробелами и пропускает пустые и «-» каталоги, тест (M-5, T8.1).
Исправлены ячейка таблицы в HARNESS.md (T10.1), «Что это» и «Тесты»
в CLAUDE.md репозитория (T10.3, T10.4).

Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
aep added 14 commits 2026-10-11 23:52:47 +03:00
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
link-roles.sh больше не создаёт симлинки agent-memory (спека, раздел 11:
симлинк делает память read-only), doctor не проверяет их; шаблоны
workspace и role-repo описывают запасной вариант 6.5 (notes/agent-memory.md).
В спеке разделы 2, 6.5, 8 получили указатель на раздел 11. Заодно --map
без значения даёт русскую ошибку и exit 2.

Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Сабагенты не получают вывод /role, поэтому глобальный CLAUDE.md задаёт
для них правило и полный путь ~/.claude/roles/dev.md, а роль dev велит
передавать этот файл контроллеру SDD и ревьюеру ветки (I-1). Уточнены
формулировки про [claude-harness] (M-2) и allow-правило push --delete (M-3).

Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
run.sh задаёт HOME во временный каталог на каждый тест и фиксирует
git-идентичность; test-install.sh передаёт HOME и CLAUDE_CONFIG_DIR
inline (M-1, T9.2). doctor.sh распознаёт шапку таблицы с лишними
пробелами и пропускает пустые и «-» каталоги, тест (M-5, T8.1).
Исправлены ячейка таблицы в HARNESS.md (T10.1), «Что это» и «Тесты»
в CLAUDE.md репозитория (T10.3, T10.4).

Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
aep changed target branch from retro/2026-10-11 to main 2026-10-12 13:59:29 +03:00
aep merged commit 2c599a1324 into main 2026-10-12 14:00:18 +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#4
No description provided.