90 Commits

Author SHA1 Message Date
aep
5d289cf5a8 Merge pull request 'chore: игнорировать __pycache__ и *.pyc (#55)' (#57) from fix/55-pycache-gitignore into main 2026-10-24 18:04:28 +03:00
Andrey Epifancev
37d7239efb chore: игнорировать __pycache__ и *.pyc (#55)
Тесты запускают python из docs/retro/scripts и оставляли untracked
docs/retro/scripts/__pycache__/ в main: guard-main не даёт его удалить,
дерево выглядело грязным, retro_leftovers.py считал это сигналом.

Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
2026-10-24 19:00:54 +04:00
aep
67ff56190c Merge pull request 'DSH: install.sh --roles дописывает DSH-заметку в dev.md (#53)' (#54) from feat/53-dsh-role-notes into main 2026-10-24 17:14:12 +03:00
Andrey Epifancev
768bc46339 fix(dsh): install.sh --roles дописывает DSH-заметку в dev.md (#53)
Установленная копия роли теперь воспроизводима: после копирования roles/
install.sh вставляет в ~/.dsh/roles/dev.md пункт «в DSH исполнение плана —
skill sdd» (после «Режим по умолчанию», с откатом в конец файла, если якоря
нет). Вставка идемпотентна: каждая установка ролей перекопирует файл и
добавляет ровно одну заметку. Общий roles/dev.md не меняется — в Claude Code
строка не действует.

--check сообщает ok/WARN про заметку; тест проверяет наличие, отсутствие
дубля после второго запуска и строку в --check. PORT.md §6 объясняет.

Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
2026-10-24 18:13:28 +04:00
aep
36bf106962 Merge pull request 'chore(openspec): archive dsh-sdd (#41)' (#51) from chore/archive-dsh-sdd into main 2026-10-24 16:57:47 +03:00
Andrey Epifancev
3ad378c1dc chore(openspec): archive dsh-sdd (#41)
Change dsh-sdd перенесён в openspec/changes/archive/2026-10-24-dsh-sdd,
дельта dsh-sdd добавлена в openspec/specs/dsh-sdd/spec.md (7 требований).

Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
2026-10-24 17:57:35 +04:00
aep
303b7f08aa Merge pull request 'DSH: SDD — skill, overlay, пробный прогон (#41)' (#50) from feat/41-dsh-sdd-spike into main 2026-10-24 16:55:41 +03:00
Andrey Epifancev
c8b92fae01 docs(dsh): пробный прогон SDD — режимы, дефект и fix-loop (#41)
Три задачи в temp-репозитории: implementer'ы deepseek-flash, все ревью
deepseek-v4-pro. Ревьюер Task 2 независимо нашёл T2.1 (медиана чётной длины
противоречит спеке) и T2.2 (нет теста), fix-раунд 1 → 186575c, скоуп-ре-ревью
APPROVED, финальное ревью ветки APPROVED. Режим 2 (фоновый контроллер, глубина
2) проверен отдельной пробой: вызов subagent из контроллера прошёл.

Артефакты прогона — openspec/changes/dsh-sdd/trial/ (план, спека, брифы,
отчёты, ledger), результаты — design.md. По урокам прогона skill sdd уточнён:
DONE_WITH_CONCERNS при замеченном расхождении, число тестов в плане — ориентир,
повтор при ошибке валидации provider/model.

Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
2026-10-24 17:49:38 +04:00
Andrey Epifancev
f714426b11 feat(dsh): skill sdd — асинхронный протокол исполнения плана (#41)
dsh/skills/sdd/SKILL.md: два режима контроллера (главная сессия / фоновый
субагент), проверка глубины и маршрутов моделей, диспатч и отчёт файлами,
контракт DONE/DONE_WITH_CONCERNS/NEEDS_CONTEXT/BLOCKED, ожидание через
завершение хода и уведомление, ревью задачи и fix-loop 5 раундов, ledger
с ## Findings, таблица отличий от Claude-SDD.

Тесты: frontmatter, режимы, инструменты, маршруты, ledger, отсутствие
job_output как ожидания; install.test.mjs ждёт два локальных skill.

Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
2026-10-24 17:40:24 +04:00
Andrey Epifancev
2bee63d305 feat(dsh): overlay профиля — model selection и maxDepth 2 (#41)
dsh/subagent-models.yml — opt-in overlay: subagent-model-selection-settings с
маршрутами deepseek-flash/deepseek-v4-pro и subagent.maxDepth: 2. В бандл не
входит: строки нет в headless, включённый флаг ломает загрузку.

install.sh --check сообщает overlay и находит maxDepth: 2 в патче профиля.
PORT.md §5 — как включить и что это даёт; §7/§8 обновлены.

Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
2026-10-24 17:37:54 +04:00
Andrey Epifancev
ee0d876f6b docs(dsh): дизайн SDD для DSH — режимы контроллера и маршруты моделей (#41)
Design note и spec delta для фазы #41: два режима контроллера (главная
сессия / фоновый сабагент), асинхронный протокол диспатча и отчётов,
fix-loop, ledger с ## Findings, карта из двух маршрутов моделей.

Основание — измеренные ограничения DSH 0.2.1-rc.3: subagent.maxDepth по
умолчанию 1, у subagent нет provider/model без modelSelectionSettings,
выбор модели работает сразу только в workflow.agent().

Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
2026-10-24 16:59:53 +04:00
aep
d567882def Merge pull request 'DSH: model-invocable role loader (#39)' (#40) from feat/39-dsh-role-loader into main 2026-10-24 15:30:44 +03:00
Andrey Epifancev
ed13705cd1 feat(dsh): model-invocable role loader (#39) 2026-10-24 16:30:25 +04:00
aep
9cadec568c Merge pull request 'DSH: отвязать skills и roles от ~/.claude (#37)' (#38) from feat/37-dsh-decouple into main 2026-10-24 15:20:41 +03:00
Andrey Epifancev
7767c5c3d7 feat(dsh): отвязать skills и roles от ~/.claude (#37) 2026-10-24 16:20:17 +04:00
aep
e6788ccef9 Merge pull request 'DSH: порт claude-harness — спайк (guard, require-plan, bootstrap, /role)' (#36) from feat/35-dsh-port-spike into main 2026-10-24 15:20:03 +03:00
Andrey Epifancev
95dab08109 docs(dsh): acceptance bootstrap пройден, находка по роли (#39) 2026-10-24 16:18:09 +04:00
Andrey Epifancev
f422119090 docs(dsh): ветка под issue #35, статус живых проверок 2026-10-24 15:49:45 +04:00
Andrey Epifancev
9412bd18e2 fix(dsh): сообщения хуков без namespace superpowers: 2026-10-24 15:42:49 +04:00
Andrey Epifancev
a6bddfc197 docs(dsh): живая проверка guard, require-plan и bootstrap 2026-10-24 15:42:00 +04:00
Andrey Epifancev
7665218247 fix(dsh): убрать импорты DSH-пакетов из бандла 2026-10-24 15:31:39 +04:00
Andrey Epifancev
7e143be61a docs(dsh): composition smoke test в temp-профиле 2026-10-24 14:59:50 +04:00
Andrey Epifancev
16a9739759 feat(dsh): каркас порта claude-harness на DeepSeek Harness 2026-10-24 14:59:03 +04:00
aep
613f843d73 Merge pull request 'Ретро 2026-10-24: cc-harness — первый прогон /harness-retro (#33)' (#34) from retro/2026-10-24 into main 2026-10-24 09:28:58 +03:00
203436b9c2 docs(retro): решения владельца 24.10 — бэклог B13–B17 принят; CLAUDE.md «Текущая работа» (#33)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 10:26:29 +04:00
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