--- description: Типичные ошибки агентов EventHub — shell, git, docker, scope, токены (корень + субагенты) alwaysApply: true --- # EventHub: типичные ошибки агентов (избегать) Канон. Субагентам: включать в промпт «следуй `agent-pitfalls.mdc` + `shell-wsl-not-powershell.mdc`». ## 1. Shell / PowerShell | Симптом | Причина | Как правильно | |---------|---------|---------------| | `unexpected EOF`, `ParserError`, пустой curl | PS ломает `"`, `$`, heredoc, `&&` | Файл `.sh` → `wsl -e bash /mnt/c/.../script.sh` | | `bash: syntax error near '('` | `grep -E ^(...)` без кавычек в PS | Только внутри `.sh` | | `{{.Names}}: command not found` | `docker --format "{{…}}"` в PS | Формат в `.sh` или простой `docker ps` | | `&&` is not valid | PowerShell не bash | Отдельные команды или `.sh` | **Запрещено в PS:** `wsl -e bash -lc "…\"…"`, `curl -d "{\"x\":…}"`, heredoc commit, `npm`/`rebar3`. ## 2. Git | Симптом | Как правильно | |---------|---------------| | `Co-authored-by: Cursor <…>` / `<` ParserError | `git commit -F .tmp-msg.txt` из PS **или** `~/.cursor/eventhub/git-commit.sh` в WSL | | `#` в `-m` обрезает сообщение | `-F` файл; в тексте `Refs EventHub/EventHubBack#N` | | `editor` / not a terminal | Не `git commit` без `-F` в WSL; из Windows: `git commit -F file` | | Сотни `M` после reset на `/mnt/c` | `git config core.filemode false` (локально); не «чинить» код | | Удалились `.cursor/`, `.idea/` | **`git clean -fdx` только с backup** env + certs; IDE-директории **не трогать** | | Push «висит» / ждёт login | **Не** `git push origin` — только `~/.cursor/eventhub/git-push.sh` / `git-push-main.sh` | | Push заблокирован Auto-review | Push в `master` — только по явной просьбе; `request_smart_mode_approval` | **`git clean` / reset к origin:** сначала сохранить `docker/.env*`, `.env.development`, `docker/traefik/certs/*`. **Push:** запрещены голые `git push` / `git push origin …`. Канон — `bash ~/.cursor/eventhub/git-push.sh ` (токен из secrets). ## 3. Docker dev (Swarm локально) | Ошибка | Правильно | |--------|-----------| | «Балансировка» → 3× eventhub | **dev:** `traefik=1` + **`eventhub=1`** (см. `EventHubDevOps/docs/STANDS.md`) | | `host-mode port already in use` | У eventhub опубликованы 8080/8445 — **нельзя** scale >1; LB = traefik | | Собрали admin-ui/front без просьбы | «Только бэк» → eventhub (+ traefik если нужен HTTPS), **без** Front/Admin образов | | Эмулятор не остановился | `docker service scale eventhub_bot-emulator-users=0` | | `No such image: eventhub:latest` | Сначала `docker build -t eventhub:latest …` или `docker/build-images.sh` | | Admin API dev не отвечает на :443 | Traefik без ports → **`http://127.0.0.1:8445`**; stage → SSH + `--resolve …:443:127.0.0.1` | ## 4. Scope (не додумывать) - Делать **ровно** запрос; не раздувать (полный `build-images.sh`, 3 ноды, admin-ui, spec commit). - Перед scale/deploy — прочитать compose и STANDS.md. - Секреты: `gitea.ps1` / `.sh` + env; не inline `source secrets` в PS one-liner. ## 5. Субагенты (Task) В промпт субагента добавлять: ```text Shell: только WSL + .sh (см. shell-wsl-not-powershell.mdc, agent-pitfalls.mdc). Один репо. Итог на русском. Не push без явного OK. ``` ## 6. Экономия токенов / лимитов моделей ### Контекст чата - **Один чат — одна задача**; после «готово / CI зелёный» — новый чат на следующий шаг (см. `WORKFLOW.md` §5). - Workspace: для Back-задачи достаточно **`EventHubBack`** (+ Spec при необходимости); не держать все репо без нужды. - **`@` точечно** — файл/папка, не `@Codebase` без причины. - Не просить «проанализируй все transcripts» — они огромные. ### Дешёвые vs дорогие действия | Дорого | Дешевле | |--------|---------| | Task explore «very thorough» | `grep` + 1–2 файла | | Полный `build-images.sh` | Только нужный образ | | Весь лог CI (80k строк) | API job + 20 строк вокруг ошибки | | Несколько subagents «на всякий» | 1 subagent, узкий промпт | | Browser deep-walk stage | Smoke-скрипт / один URL | ### Меньше итераций - Сразу **`.sh`**, не 5 попыток PS one-liner (каждая = новый turn). - Git перед commit: **один** `status` + `diff`, не три раза подряд. - Тесты: `rebar3 eunit --module=…` если трогали один модуль; не полный suite без нужды. - Docker: не rebuild, если `docker images` уже есть нужный tag. ### Модели и режимы - **Ask / Plan** — вопросы и варианты без tool calls. - **Agent** — только когда нужны команды и правки. - Bugbot / Security Review — не на каждый мелкий diff. ### Scope в запросе (шаблон) ```text Репо: EventHubBack Issue: #N Scope: только … Не: front, docker, push, spec Done: eunit / lint / … ``` ### Subagents - Редко; промпт = issue + файлы + done, **без** всей переписки. - `one-repo-per-agent` — меньше контекста и ошибок. ### Повторяемое — в скрипты Токены verify, smoke creds, stage deploy — **`~/.cursor/eventhub/*.sh`**, не заново через SSH в каждом чате.