Files

86 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Зависания и грязный main
То, на чём оркестрация этой сессии ломалась. Не чинить «на всякий случай» —
только когда симптом совпал.
## Транскрипт
Живой агент, а в jsonl только стартовый user-промпт и «читаю скилл» /
`GetMcpTools` — он не работает. После `interrupt` снова одна строка —
повторный завис.
Не поллить транскрипты без повода: completion, «завис», «продолжай», тишина
заметно дольше обычной фазы.
## MCP
`GetMcpTools` на `cursor-app-control` и ожидание echovault держали агента
полчаса. В промпте: **не открывай этот сервер через `GetMcpTools`**. После
готового worktree можно один `move_agent_to_root` с известной схемой
`{ rootPath }`. Memory — один раз или без неё.
## Interrupt
Короткий промпт: не начинай с нуля, брось MCP, вот ветка и worktree, вот
незакоммиченное, которое нельзя выкинуть. Длинный повтор всего скилла снова
вешает.
Два зависания подряд — старый уступает («git не трогай»), новый — продолжение
того же 🔄: та же `phase/<N>-*` и тот же worktree, статус не сбрасывать.
Это не новый захват ⬜ и не второй автор. Пинает координатор, не отдельный агент.
## Worktree
Путь **вне** репозитория. `node_modules` копировать из основного дерева или
`npm ci`; копия worktree внутрь себя забивает диск. `git worktree remove
--force` после merge; каталог с битым `node_modules` может остаться — prune.
Первая сборка в worktree длинная — это не завис.
`git branch phase/<N>-<slug>` без `main` берёт HEAD IDE. Коммит 🔄 «в основном
дереве» на `bug/…` оставляет заявку в истории бага, а worktree иногда так и не
появляется — агент пишет фазу в дерево пользователя. Лечение: interrupt, не
`checkout`, `worktree add` на уже существующую `phase/<N>-*`, 🔄 донести на
`main` через `wt-claim-main`. Коммиты на `bug/…` не revert. Правки после
захвата — только абсолютным путём worktree.
## Грязный main и чужая ветка
`merge/lock` общий: фаза, баг, ревью, side. Чужой — ждать, не снимать.
phase-work не сливает, если `status --porcelain` непустой. Портреты, SwarmUI,
чужой WIP на карточке блокировали 32/36/35/38/41.
Основное дерево должно уже стоять на `main`. Если пользователь на `bug/…`
не `checkout main`: снимешь ему IDE. Merge-агент стоп, слот ждёт.
Пользователь сказал «сливай» — stash `-u` своим сообщением, merge, pop
только его. Pop с конфликтом: stash живёт, дерево не калечить.
Не stash’ать файлы, которые пишет сосед в **основном** дереве (он обязан
быть в worktree; если нет — merge-агент стоп и отчёт «main занят»).
## DLL и тесты хоста
MSB3021/3027: процесс пользователя держит `HSchool.Server`. Не убивать.
В отчёте: AppHost на main не пересобрался. Весь `dotnet test` solution
из-за этого не гонять — и так не надо: только проект из Testing policy.
После фазы сессии хостовые тесты логинятся в `ResetAsync`. Два игрока — две
куки, не общий jar. `OpenSchool` / часы от гостя не доходят — сокет-тесты
открывают школу **владельцем**.
## Клиент
`npm test` на Windows иногда падает в параллели — `--maxWorkers=1`.
`vitest` зелёный при мёртвом `tsc`: лови `npm run build` (дубликат ключа,
неиспользуемый import).
## Pause / last wave
Пауза: WIP-коммит на ветке фазы, worktree оставить, main не трогать.
Продолжение: `resume` с хешем WIP, не `git branch` заново.
«Остановись» / «закончи с этими»: текущие доводят merge, координатор **не**
открывает следующую ⬜ по completion.