65 Commits

Author SHA1 Message Date
bdaee66dfc docs(retro): ретро 2026-10-24 по cc-harness — первый прогон /harness-retro (#33)
Срез с 2026-10-11 (2 сессии): метрики и сравнение с 11.10, 6 блокировок размечены в корпус (135/135), хвостов нет, поправки владельца; находки RT-21…RT-25, бэклог B13–B17.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 10:21:40 +04:00
aep
c7934fb9f3 Merge pull request 'Архив OpenSpec harness-retro → openspec/specs/harness-retro, hook-guards (#29)' (#32) from chore/archive-harness-retro into main 2026-10-24 09:15:05 +03:00
76e2d9e884 chore(openspec): архив harness-retro, спека harness-retro в openspec/specs, hook-guards обновлена (#29)
openspec archive harness-retro: change → openspec/changes/archive/2026-10-24-harness-retro/; openspec/specs/harness-retro/spec.md (22 требования), hook-guards — MODIFIED «Регрессионный корпус хуков»; известные ошибки корпуса вынесены в отдельное требование, чтобы текст требования был ≤ 500 символов (validate --strict).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 10:11:55 +04:00
aep
1697c77a83 Merge pull request 'B12: /harness-retro — срез метрик, поправки владельца, хвосты закрытия, корпус по сегментам (#29, 0.6.0)' (#30) from feat/29-harness-retro into main 2026-10-24 09:07:59 +03:00
132504520b feat(retro): «сделай сам» — признак поправки владельца (H-1, PR #30)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 10:07:26 +04:00
ced700e65f docs: CHANGELOG 0.6.0 — сабагенты, период по записям, --from (#29)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:01:19 +04:00
3d2ce3f41d fix(retro): финальное ревью — сабагенты, период по записям, разбор Bash, redact до обрезки, --from (#29)
- C-1: транскрипты сабагентов (<сессия>/subagents/*.jsonl) вливаются в
  сессию-родителя — ходы, токены, инструменты, codegraph, блокировки,
  отказы; промпты, роль, стартовый контекст — только из основного.
  hook_blocks_export.py выгружает их блокировки с сессией-родителем.
- I-7: период режется по меткам времени записей; сессия на стыке
  делится между ретро, стартовый контекст — если первый ход в периоде.
- I-1: простые команды Bash — shlex с punctuation_chars, «|» в кавычках
  команду не делит. I-2: правило src/ ловит и сам каталог src.
- I-3: clip() — redact до обрезки (кандидаты, выгрузка), роль — redact.
- I-4: без --since период берётся из существующего --out; --from рисует
  «Цифры» из сохранённого среза. SKILL.md передаёт период явно.
- I-5: выгрузка ретро без разметки — сборка корпуса падает.
- I-6: сводка компакции — не промпт; «перечитай» — побуждение перечитать.
- 2026-10-11.metrics.json: несравнимое помечено (без сабагентов, широкий
  «перечитай»). Спека и design.md (Decisions) обновлены.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:59:41 +04:00
cc697c030c feat(retro): skill /harness-retro, шаблон ретро, метрики 11.10; документация 0.6.0 (#29)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:28:56 +04:00
e5c00a5442 docs(spec): сценарий «SDD workspace активной задачи», требование хвостов ≤ 500 символов (#29)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:25:48 +04:00
4bbf6ebb3a feat(retro): retro_leftovers.py — хвосты чеклиста закрытия по состоянию репозиториев (#29)
SDD workspace в worktree активной задачи хвостом не считается (O-19, живой прогон).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:25:14 +04:00
dde575673d feat(retro): retro_metrics.py — срез метрик, кандидаты в поправки владельца, сравнение с прошлым ретро (#29)
Синтетические сообщения об ошибке API (model <synthetic>) не считаются ходом модели (O-18, живой прогон).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:21:53 +04:00
4d52ef773d feat(retro): корпус хуков по сегментам и known, выгрузка блокировок за период (#29)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:17:22 +04:00
60d31c25db docs(plan): план /harness-retro — 4 задачи; design: подсчёт по message.id, отказы владельца, дедупликация сессий (#29)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:10:10 +04:00
b77776849e docs(spec): /harness-retro — срез метрик, поправки владельца, хвосты закрытия, корпус по сегментам (#29)
OpenSpec change harness-retro: proposal, specs (harness-retro — новая
capability; hook-guards — MODIFIED «Регрессионный корпус хуков»: сегменты
и known), design с Decisions made without discussion. По итогам
brainstorming 24.10.2026: черновик ретро, срез одного проекта, запуск из
репозитория обвязки, разметка блокировок агентом в корпус, хвосты по
текущему состоянию, поправки владельца по процессу, подход A.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:47:00 +04:00
aep
957ce1e007 Merge pull request 'Worktree в .claude/worktrees/ через EnterWorktree, вход без подтверждения (#25, 0.5.1)' (#27) from feat/25-worktrees-in-repo into main 2026-10-23 23:22:48 +03:00
00b496d6da feat: worktree в <repo>/.claude/worktrees/ через EnterWorktree, вход без подтверждения (#25, 0.5.1)
С Claude Code 2.1.206 вход в worktree вне .claude/worktrees/ спрашивает
подтверждение при любых allow-правилах. EnterWorktree с именем создаёт
worktree в <repo>/.claude/worktrees/<slug> на ветке worktree-<slug> от
origin/main и входит без вопроса; ветка переименовывается в
feat/<id>-<slug>.

- roles/dev.md: «Исполнение» — EnterWorktree с именем; п. 1 закрытия —
  archive-<id>; п. 4 — ExitWorktree (keep) снимает блокировку сессии,
  затем git worktree remove и branch -D.
- .claude/worktrees/ в .gitignore: adopt-project.sh, project-template,
  этот репозиторий; doctor.sh — WARN, если не игнорируется.
- Спека hook-guards: сценарии «worktree внутри репозитория» для
  guard-main и require-plan; тесты закрепляют уже верное поведение.
- HARNESS.md (шаг 4, п. 4, подтверждения), SKILL.md, CHANGELOG 0.5.1,
  CLAUDE.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:20:35 +04:00
aep
04369f1b0a Merge pull request 'install.sh ставит allow-правила цикла фичи, --no-permissions для отказа (#24, 0.5.0)' (#26) from feat/24-harness-permissions into main 2026-10-23 23:04:32 +03:00
897fa0f3a7 feat: install.sh ставит allow-правила цикла фичи, --no-permissions для отказа (#24, 0.5.0)
Пересмотр решения владельца 2: allow-правила (git worktree, git branch
-m/-D, push фичевых и chore-веток, push --delete, tea issues/pulls
create/list/edit/comments) ставит install.sh в ~/.claude/settings.json,
а не владелец руками. Список — global/permissions.json; merge и push в
main в нём нет. Правила только дописываются, чужие не трогаются; копия
списка — ~/.claude/harness/permissions.json для doctor.sh.

- install.sh: шаг 5 — слияние permissions.allow; --no-permissions;
  неизвестный аргумент — ошибка; --check показывает permissions N/M.
- doctor.sh, «Машина»: ok / WARN со списком недостающих / MISS.
- adopt/new-project: строка push --delete — для --no-permissions.
- harness-doctor: агент чинит install.sh --no-permissions, права ставит
  владелец (иначе обход отказа классификатора auto mode).
- EnterWorktree не входит: вход в worktree вне .claude/worktrees/
  спрашивает подтверждение при любых правилах (#25).
- README, HARNESS.md, roles/dev.md, CLAUDE.md, ретро (пометка о
  пересмотре решения 2), CHANGELOG 0.5.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:01:57 +04:00
aep
89e647f230 Merge pull request 'B3: allow-правило git push origin --delete — строка в adopt/new-project, проверка в doctor (#22, 0.4.2)' (#23) from feat/22-allow-push-delete into main 2026-10-23 22:42:06 +03:00
1d1c70f66b feat: allow-правило git push origin --delete — строка в adopt/new-project, проверка в doctor (#22, B3)
Решение владельца 2: удаление серверных веток (чеклист закрытия, п. 4)
разрешается allow-правилом в настройках проекта; строку добавляет
владелец, обвязка её даёт.

- doctor.sh, раздел «Проект» (git и workspace): ищет правило, покрывающее
  `git push origin --delete <любая ветка>`, в .claude/settings.json и
  settings.local.json проекта и в глобальном settings.json; ok с файлом,
  WARN с готовой строкой, битый JSON — info.
- adopt-project.sh (обычный режим) и new-project.sh (оба режима) печатают
  строку в «Дальше»; файл настроек не пишут.
- SKILL.md: пункт чеклиста для нового WARN.
- HARNESS.md: шаг 10 — 8 пунктов в roles/dev.md, рецепт п. 4.
- roles/dev.md, п. 4: кто печатает строку; worktree remove раньше
  branch -D (ветку, выведенную в worktree, git не удаляет).
- CHANGELOG 0.4.2, CLAUDE.md «Текущая работа».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 23:39:47 +04:00
aep
dce95e7e86 Merge pull request 'Установка codegraph: npm и claude mcp add-json вместо brew (#19, O-8, 0.4.1)' (#20) from feat/19-codegraph-install into main 2026-10-23 22:15:55 +03:00
af090c2b0d docs: установка codegraph через npm и claude mcp add-json, не brew (#19, O-8)
harness-doctor/SKILL.md советовал `brew install codegraph` — формулы нет,
команда падает. codegraph — npm-пакет @colbymchenry/codegraph; MCP
подключается отдельно через `claude mcp add-json -s user`. Штатный
`codegraph install` не годится: дописывает секцию в ~/.claude/CLAUDE.md,
которую сотрёт install.sh. README (таблица и блок установки) — те же
команды. CHANGELOG 0.4.1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 23:14:16 +04:00
aep
9fe77abcf4 Merge pull request 'Архив OpenSpec hooks-write-target → openspec/specs/hook-guards (#6)' (#14) from chore/archive-hooks-write-target into main 2026-10-23 22:04:30 +03:00
6b7a073f6f chore(openspec): архив hooks-write-target, спека hook-guards в openspec/specs (#6)
openspec archive hooks-write-target: change перенесён в
openspec/changes/archive/2026-10-16-hooks-write-target/, дельта применена —
openspec/specs/hook-guards/spec.md (20 требований), validate --strict проходит.

Ссылки на путь спеки в harness_target.py, hook_cases_build.py и CHANGELOG
переведены на openspec/specs/hook-guards/spec.md; в CLAUDE.md «Текущая работа»
B1+B2 переведены в «Сделано» (PR #12, follow-ups — #13).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 10:16:06 +04:00
aep
d245e506df Merge pull request 'Хуки решают по цели записи + регрессионный корпус хуков (#6, B1+B2, 0.4.0)' (#12) from feat/6-guard-main-target into main 2026-10-16 09:11:05 +03:00
2f96a13861 fix(hooks): финальное ревью — checkout main, префиксы с опциями, ссылки, литеральные пути, push текущей ветки (#6)
I-1, I-2, M-3, M-4, M-5 (переоценены в Important), M-8; спека и design.md синхронизированы (M-7).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 02:24:07 +04:00
2fd2396c5c feat: install/doctor ставят и проверяют ядро и корпус хуков; документация 0.4.0 (#6)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:59:26 +04:00
3d54932709 test(hooks): регрессионный корпус хуков из транскриптов, экстрактор только по ошибкам хука (#6)
B2, RT-6, O-1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:56:47 +04:00
1620d1e806 feat(hooks): require-plan по репозиторию правимого файла (#6)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:55:05 +04:00
87f2c956aa feat(hooks): guard-main решает по цели записи, без исключения openspec-only (#6)
B1; RT-1, RT-2, RT-7; решение владельца 1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:54:33 +04:00
df203521ed feat(hooks): harness_target.py — разбор команды на цели записи (#6)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:53:58 +04:00
a2170232d9 docs(plan): план hooks-write-target — 5 задач, код из проверенного прототипа (#6)
Сценарий спеки: запись через симлинк, указывающий в main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:52:36 +04:00
7e4b5cfec9 docs(spec): hooks-write-target — смена ветки внутри команды, факты корпуса (O-1) (#6)
Требование «Смена ветки внутри команды» (c072, поток архива отдельным PR), сценарий BSD sed -i ''. design: 76 настоящих блокировок из 126, c083 — файл памяти, собственный лексер, один hook_corpus.py, фильтр retro_blocks.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:47:37 +04:00
079d0a44bc docs(spec): change hooks-write-target — хуки решают по цели записи (#6)
proposal, specs/hook-guards (16 требований), design с Decisions made without discussion. B1, B2, решение владельца 1; RT-1, RT-2, RT-6, RT-7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 23:57:07 +04:00
Andrey Epifancev
2549e86882 test(fixtures): 126 блокировок хуков из транскриптов (сырьё B2, #6) 2026-10-12 15:37:08 +04:00
Andrey Epifancev
5fd8346ef9 docs: старт #6 — экспорт блокировок хуков из транскриптов, текущая работа в CLAUDE.md
hook_blocks_export.py выгружает блокировки хуков в JSONL (cwd, ветка, команда,
ответ хука) — сырьё для регрессионных тестов B2. Похожее на секреты скрывается.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:26:47 +04:00
aep
2c599a1324 Merge pull request 'Роли и память, часть 1: слой ролей обвязки (role-hint, /role, briefing, link-roles)' (#4) from feat/2-roles-and-memory into main
Reviewed-on: #4
2026-10-12 14:00:16 +03:00
aep
c6ce0584fb Merge pull request 'Ретро 11.10.2026, спека ролей и памяти, CLAUDE.md по коду' (#3) from retro/2026-10-11 into main
Reviewed-on: #3
2026-10-12 13:59:04 +03:00
Andrey Epifancev
03078e9b90 docs(spec): рулинги SDD (R-4..R-11) в Decisions made without discussion
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
2026-10-12 00:50:19 +04:00
Andrey Epifancev
874c6c4c57 test: изоляция HOME и git-идентичности, мелкие правки ревью
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
2026-10-12 00:48:58 +04:00
Andrey Epifancev
d2889483bc fix: правила для сабагентов, точные формулировки dev.md
Сабагенты не получают вывод /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
2026-10-12 00:48:16 +04:00
Andrey Epifancev
6744d40fb8 fix: согласовать шаблоны и link-roles со спайком памяти агентов
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
2026-10-12 00:47:47 +04:00
Andrey Epifancev
ed5d1f9014 docs: роли в HARNESS.md и README, CHANGELOG 0.3.0, решения плана в спеке
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
2026-10-12 00:38:55 +04:00
Andrey Epifancev
24b8333bf5 feat(install): роли, skill /role, briefing, role-hint, link-roles; --check видит их
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
2026-10-12 00:37:08 +04:00
Andrey Epifancev
0e984a096e feat(doctor): проверки ролей, самотест role-hint, режим workspace, размеры
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
2026-10-12 00:35:45 +04:00
Andrey Epifancev
a6b9fa5572 feat: шаблоны workspace и role-repo, режим --workspace в adopt/new-project
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
2026-10-12 00:34:12 +04:00
Andrey Epifancev
ceec425760 feat: link-roles.sh — симлинки ролей, агентов и памяти из workspace
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
2026-10-12 00:32:08 +04:00
Andrey Epifancev
2184689eb9 feat: skill /role и агент briefing
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
2026-10-12 00:30:52 +04:00
Andrey Epifancev
c3512d068e feat(global): CLAUDE.md ≤ 3 КБ — роль, хуки, память, маркировка; таблица адресов
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
2026-10-12 00:29:18 +04:00
Andrey Epifancev
112be7e622 feat(roles): общие файлы ролей dev/admin/analyst/qa (формат 3.1)
Refs #2

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
2026-10-12 00:27:58 +04:00