docs(handoff): mappa-prod-deploy session — #1012 closed, mappa ponged
This commit is contained in:
@@ -1,52 +1,43 @@
|
||||
---
|
||||
_last_updated_: 2026-08-23T14:00:00Z
|
||||
session_id: books-incident-sched-spin-closed-2026-08-23
|
||||
_last_updated_: 2026-08-23T15:43:31Z
|
||||
session_id: mappa-prod-deploy-2026-08-23
|
||||
---
|
||||
|
||||
# Next session handoff
|
||||
|
||||
## Что сделано в этой сессии (всё закрыто)
|
||||
## Что сделано в этой сессии (закрыто)
|
||||
|
||||
### books sched: оба тенанта на file-managed (durable config) — DONE
|
||||
Продолжение инцидента 2026-08-23 (спин ozonFbsPostingsSyncronization). Хронология этой сессии:
|
||||
1. **Письмо books 13:14Z**: slovo verify PASS (25 тасок, 23171 б, бэкап на месте); bookva-файл готов (commit `6d4f163` bookva-overlay main, 23 таски, data `{idSeller:1}`, recipients у отчёта сохранены).
|
||||
2. **Bookva-деплой выполнен** (13:49-13:55Z): файл → volume `bookva-sched-config` (бэкап `tasks.json.bak-pre-6d4f163`; diff до заливки = только 3 Ozon-таски). Live-sync НЕ конвертирует runtime-таски (sync их не трогает — только API) → `DELETE /api/tasks` ×3 + `DELETE /api/schedules/:id` ×3 (все 204). Verify: 24 таски все `fileManaged:true`, дублей 0, schedules data `{idSeller:1}` (report: recipients+idSeller:1), ручной триггер постинга → `succeeded {sellersProcessed:2}`. **#991 закрыта** (closing-note с verify).
|
||||
3. **Письмо books 13:35Z** (после «ты висишь»): recipients отчёта восстановлены (books commit `854e381`, 25 тасок) + SMTP-фикс:
|
||||
- Slovo-файл `854e381` залит in-place в `/opt/books/sched/tasks.json` (бэкап `.bak-pre-recipients`), live-sync верифицирован (schedule report: data `{idSeller:2, recipients:[3]}`, fileManaged:true, next 07:00Z завтра).
|
||||
- SMTP: `/opt/books/task-runner/config/default.json` → `mailSettings.from` + `transport.auth.user/pass` = `e-16513832@yandex.ru` / app-pass (из `pass snolla-smtp/full-env`). ⚠️ Поменял и `from` (старый `noreply@snolla.com` мёртв — Yandex отключил протокол-доступ 14.08; SMTP требует from==auth-user). Бэкап `.bak-pre-smtp-fix`. **books-task-runner перезапущен** (config кэшируется при первом send — lazy init `sendReportsByEmail.js`). `nodemailer.verify()` → **SMTP_VERIFY_OK**.
|
||||
- Пинг books отправлен (13:49Z) → ждём ручной прогон отчёта `emailSent: true`.
|
||||
4. **Ghost `system-cleanup-task-runs`** удалён на ОБОИХ тенантах (books-sched + bookva-sched, 204×2) — disabled-сирота, books разрешал.
|
||||
### 🟢 #1012 mappa-prod-deploy — инфра-деплой выполнен, передан mappa
|
||||
Письмо mappa 15:10Z → взял таску #1012 (ready, notify mappa). Разделение труда подтверждено юзером: **деплой = админ, прод-импорт/verify/read-only/фолбэк/ntfy/MCP = mappa**. Сделано (инфра):
|
||||
|
||||
Итог: slovo (25 тасок, recipients live) + bookva (23 таски, idSeller:1) — оба file-managed, дублей 0. **Финальное подтверждение books 14:07Z**: их спот-чек сходится (23 таски, runtime 0, ghost 0, 3 Ozon fileManaged:true), emailSent:true, #991 done — закрыто обеими сторонами.
|
||||
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 |
|
||||
|---|---|---|
|
||||
| ~~books: ручной прогон отчёта Ozon~~ — **`emailSent: true`** (13:50Z, run 6fb9dc84, письмо abddcf07…@yandex.ru), books согласен с from-сменой | 🟢 закрыто | — |
|
||||
| legacy agendaJobs (60 «posting»-сирот в agendaDb slovo+bookva) | 🟡 | чистка отдельно (не трогал, согласовано) |
|
||||
| `fbsPostings.js:73` TypeError (`undefined.stocks`, per-posting edge case) | 🟡 | флагнул books в отчёте 11:35Z |
|
||||
| meeting-room — merge-conflict (UU) | 🟡 | разрешить → миграция 2 тасок + 12 файлов |
|
||||
| coworker-skill push на github | 🟡 ждёт решения | meta-leak риск; решение за оператором |
|
||||
| [#803 llm-web-proxy] (доска) | 🔴 active | next action в STATUS.md (executors/translators из omniroute) |
|
||||
| #301 fix-nl-vds-reality-pq-dest | 🟡 | server-side done, ждёт client-side |
|
||||
| ~~#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 тасок |
|
||||
|
||||
## Полезные факты (креды/доступы — pass, не wiki)
|
||||
- Portainer books VDS: `https://portainer.kzntsv.site` (X-API-Key из `pass show books-vds/full-env`), endpoint 1.
|
||||
- Sched admin API: контейнерные IPs в сети `proxy` (books-sched 172.20.0.20:3031, bookva-sched 172.20.0.12:3031), Bearer = `SCHED_ADMIN_KEY` из env контейнера. Роуты: `GET /api/tasks|schedules|runs`, `DELETE /api/tasks/:name`, `DELETE /api/schedules/:id`, `POST /api/tasks/:name/run` (runs-история сохраняется). Доступ через SSH на books-vds (`~/.ssh/id_ed25519_books_ops`, root@89.253.255.133).
|
||||
- Конфиги: slovo `/opt/books/sched/tasks.json` (bind, in-place cp), bookva volume `/var/lib/docker/volumes/bookva-sched-config/_data/tasks.json`. Live-sync ≤60с, рестарт НЕ нужен для файла; task-runner config (`/opt/books/task-runner/config/default.json`) — кэшируется, рестарт обязателен.
|
||||
- SMTP рабочие креды: `pass show snolla-smtp/full-env` (`e-16513832@yandex.ru`, app-pass).
|
||||
- Sched-демон: официальный `@sched/daemon` (репо `sched`, packages/admin-api) — роуты в `packages/admin-api/src/admin-api.ts`.
|
||||
## Спроси user'а
|
||||
- (нет на этом раунде — деплой закрыт по канону, письмо mappa отправлено)
|
||||
|
||||
## Не делать (guards)
|
||||
- Не диспатчить сборки/деплои books без нового письма — все запрошенные выполнены.
|
||||
- Не перезаписывать прод tasks.json сгенерированным — правки точечные, in-place (`sed > tmp && cat tmp > file`, не mv).
|
||||
- Не трогать runtime-таски в сторе (fileManaged:false) без команды books.
|
||||
- Редеплой 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 без отдельного запроса.
|
||||
- Не архивировать handoff-файлы (sliding contract).
|
||||
- `noreply@snolla.com` — МЁРТВЫЙ ящик (Yandex отключил 14.08); не возвращать в конфиги.
|
||||
|
||||
## Предложено юзеру (статус на конец сессии)
|
||||
- ✅ Wiki-ingest выполнен (юзер «да»): `concepts/sched-runtime-to-file-managed-migration.md` создан, index.md+1, log.md, коммит `5be661ac` (вместе с handoff).
|
||||
- 🟡 Открытое предложение: выровнять frontmatter существующих .wiki-страниц (`related: [[...]]` без кавычек ломает YAML-парсинг `knowledge.suggest_promote` — упал на `admin-api-surface-normalization`/`namespace-consolidation-snolla` и т.п.). Мелкая таска, если юзер захочет.
|
||||
- 🟡 #803 llm-web-proxy (дашборд-фиксы за прошлую сессию) — нота/закрытие на усмотрение юзера.
|
||||
## 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 при желании.
|
||||
|
||||
Reference in New Issue
Block a user