--- _last_updated_: 2026-08-23T15:43:31Z session_id: mappa-prod-deploy-2026-08-23 --- # Next session handoff ## Что сделано в этой сессии (закрыто) ### 🟢 #1012 mappa-prod-deploy — инфра-деплой выполнен, передан mappa Письмо mappa 15:10Z → взял таску #1012 (ready, notify mappa). Разделение труда подтверждено юзером: **деплой = админ, прод-импорт/verify/read-only/фолбэк/ntfy/MCP = mappa**. Сделано (инфра): 1. **БД**: отдельная `mappa` (role + db, owner mappa) на общем `postgres:16` VDS. Креды → **`pass show mappa/full-env`** (в т.ч. `DATABASE_URL` для docker-сети: `postgres://mappa:…@postgres:5432/mappa`). 2. **Образ**: `registry.kzntsv.site/mappa:0.1.0`. Dockerfile добавлен в репо mappa (commit `56366eb`). ⚠️ Грабли: tsc не копирует `.sql` → `schema.sql` в dist обязателен (COPY в Dockerfile), иначе migrate() падает «schema.sql not found». Образ пересобирался 2×. 3. **Compose**: source-of-truth `host-stacks/vds-kzntsv/mappa.compose.yml` (commit `8f1b13f3`): mem_limit 512m, restart unless-stopped, сети shared-dbs+proxy, healthcheck wget /health, traefik label → `https://mappa.vds.kzntsv.site`. 4. **Deploy**: Portainer stack 26 `mappa` (standalone string-mode, endpoint 1; скрипт `.tmp/mappa-portainer-deploy.py` + restart). НЕ ad-hoc compose up (VDS ops rule). 5. **Verify**: контейнер Up (healthy), `/health` → `{"ok":true,"service":"mappa"}`, `/admin/status` + `/graph/stats` 200, миграции легли (6 таблиц owner=mappa, БД пустая — entities=0). 6. **Пинг mappa**: письмо `mappa/.agents/inbox/2026-08-23T18-45-00Z-admin-mappa-deployed.md` — доставлено (монитор mappa утащил в `.read/` 18:34). #1012 закрыта (commit `5870b75b`). ## Открытые треки | Трек | Статус | Entry-point | |---|---|---| | ~~#1012 mappa-prod-deploy~~ | 🟢 закрыто | — | | mappa #985 mappa-deploy | 🔵 blocked-by #1012 → ждёт 🟢 (импорт+verify+read-only+ntfy+MCP за mappa) | письмо-пинг в mappa inbox доставлено; следить за их 🟢 | | #803 llm-web-proxy | 🔴 active | next action в STATUS.md (executors/translators из omniroute) | | MCP-кэш (meta_status) | 🟡 | synced 2026-08-22 22:19 | | legacy agendaJobs (60 «posting»-сирот) | 🟡 | чистка отдельно | | fbsPostings.js:73 TypeError | 🟡 | флагнул books | | meeting-room merge-conflict (UU) | 🟡 | разрешить → миграция 2 тасок | ## Спроси user'а - (нет на этом раунде — деплой закрыт по канону, письмо mappa отправлено) ## Не делать (guards) - Редеплой mappa — только через Portainer (`POST /api/stacks/26/{stop,start}`; JWT как в миграц. скрипте). `docker compose up` по SSH — anti-pattern. - Новый тег образа mappa → `docker pull` на VDS ДО restart стека (ловил залипание на старом digest). - Не дублировать прод-импорт/ntfy/read-only — это скоуп mappa (#985), не админа. - `noreply@snolla.com` — мёртвый ящик, не возвращать в конфиги. - Не чистить legacy agendaJobs без отдельного запроса. ## Memory updates за сессию - Прод-инфра mappa: БД на общем postgres:16 (база+role mappa, креды в pass), стек Portainer 26, endpoint `mappa.vds.kzntsv.site`, образ `registry.kzntsv.site/mappa:0.1.0`, compose в `host-stacks/vds-kzntsv/mappa.compose.yml`. Всё зафиксировано в closing-note #1012. - Кандидат в shared-wiki: паттерн «schema.sql не попадает в dist при tsc-сборке — копировать отдельно в Dockerfile» + «Portainer stack не подхватывает новый digest без docker pull». Предложить ingest при желании.