55 lines
8.1 KiB
Markdown
55 lines
8.1 KiB
Markdown
---
|
||
_last_updated_: 2026-08-23T12:52:00Z
|
||
session_id: books-incident-sched-spin-closed-2026-08-23
|
||
---
|
||
|
||
# Next session handoff
|
||
|
||
## Что сделано в этой сессии (всё закрыто)
|
||
|
||
### LWP (llm-web-proxy) — дашборд, 4 фикса (v0.1.13→v0.1.16, запушены, сервер перезапущен)
|
||
- **v0.1.13**: таймлайн «Запросы по времени» был фейковым (бары = `reqs/24` плоская константа → все одинаковые). `metrics.js` теперь бакетит реальные ts `req`-событий → `timeline {startMs,endMs,buckets}` (null при нуле); дашборд рисует гистограмму, нулевые бакеты тёмные, empty-state «нет запросов». +4 теста, 120/120.
|
||
- **v0.1.14**: метки над барами были «29791275м» (минуты с эпохи) → локальное HH:MM (`toLocaleTimeString`).
|
||
- **v0.1.15**: убран лишний суффикс «м».
|
||
- **v0.1.16**: высокий бар + метка вылезали за границу секции (бар 80px > контент 74px; метка top:-18px). Контейнер 90→110px, макс. бар 80→74px — бар и время внутри.
|
||
- Локальный репо: `C:/Users/vitya/projects/.common/lib/llm-web-proxy` (симлинк глобальной установки; бинарь `lwp`, сервер 127.0.0.1:8788, autostart vbs).
|
||
|
||
### books инцидент (спин ozonFbsPostingsSyncronization, ~75 req/сек) — ЗАКРЫТ
|
||
Полная цепочка (переписка в `books/.agents/inbox/`, отчёты `.admin` 10:22→11:35Z):
|
||
1. **Деплой #974/#975** (sched tenant=all, run #565): CORE_SHA-инъекция + slovo bind-директории `/opt/books/sched:/app/config:ro` + `--tasks /app/config/tasks.json` + `DOCKER_CONFIG`; bookva-overlay `DEPLOY_AT`. Live-sync #975 верифицирован на обоих тенантах (in-place правка → подхват ≤60с, RestartCount 0). #977 (bookva probe) тоже.
|
||
2. **Спин-инцидент**: корень = slovo-БД seller 1 (Bookva, 50542) держал **ключ Slovo** (артефакт tenant-split; оба ключа были d6227b). Фикс: `UPDATE books.sellers SET api_key=<ключ Bookva ddc24146…/f700f3> WHERE id_seller=1` (взят из bookva-db; хэш-верификация до/после).
|
||
3. **Флуд**: `docker restart books-task-runner` + `POST /tasks/ozon fbs postings syncronization/pause` (10:40Z). Мёртв, 0 ошибок с тех пор.
|
||
4. **Миграции расписаний** (`packages/tools/sched-schedules-create.js`): slovo 5+5, bookva 3+3, errors 0, dedupKey `agenda:*` (идемпотентно). Schedules несут `data {idSeller:2}` из agendaJobs. **Стуктура**: стора sched = mongo `agendaDb` (`sched_tasks`/`sched_schedules`); runtime-таски fileManaged:false по дизайну (RUNTIME_TASK_NAMES) — НЕ возвращать в tasks.json.
|
||
5. **Код-фикс `2a38fb5`** (break в outer catch) — собран (#566, реестр digest 83c263b9→8c3a4d9b) и задеплоен на ОБА task-runner (образ `4de2c54d`). ⚠️ slovo task-runner пересоздаётся только через **job-scheduler**-стек (`STACK_ID_SLOVO_TASK_RUNNER` пуст); bookva — через task-runner-стек. Первый деплой был преждевременным (до конца сборки) — повторный деплой исправил.
|
||
6. **Resume постинга** + смоук-ран: `succeeded {sellersProcessed: 2}`, спин-сигнатуры нет, Invalid Api-Key 0. Часовое расписание армировано (12:01Z).
|
||
7. **⚠️ ОТКАТ ключа (12:07Z)**: БД-фикс seller 1 был ошибкой — slovo-ключ у seller 1 (Bookva) в slovo-БД — **НАМЕРЕННАЯ заглушка** (анти-утечка: slovo-стек не должен ходить в Ozon под Bookva-кабинетом). Откатил `968302d1…` обратно (books подтвердил владелец). **НЕ «чинить» снова**: slovo-БД seller 1 (50542) = slovo-ключ (d6227b) — это контракт. Код-фикс break-on-error делает заглушку безопасной (фейл-фаст, не спин).
|
||
8. **Зеркальная заглушка (12:15Z)**: bookva-БД seller 2 (94191) = `ddc24146` (bookva-ключ) — заглушка, чтобы bookva не ходил в Ozon как Slovo. Полный контракт: каждый стек ходит только своими кредами (slovo=94191, bookva=50542); мисматч-пары в обеих БД — намеренные. bookva runtime-расписания postings/products — data:null (all-sellers) → будут фейлиться на seller 2 (401→break, ожидаемо); фикс: bookva schedules data {idSeller:1} (12:25Z). ПЕРЕВОД SLOVO В FILE-MANAGED СДЕЛАН 12:50Z (5 тасок из deploy/sched-tasks.json, стора почищена, файл в git — коммит 887bbae). Bookva-перевод ждёт файла с idSeller:1 от books.
|
||
|
||
## Открытые треки
|
||
| Трек | Статус | Entry-point |
|
||
|---|---|---|
|
||
| books #990/#991 (restore/durable-config, runtime-owned) | 🟡 на books-доске | их сторона; фоллоу-ап: перевод 5 runtime-тасок в file-managed ИЛИ документирование runtime-контракта |
|
||
| 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); дашборд-фиксы v0.1.13-15 не влияют на задачу |
|
||
| #301 fix-nl-vds-reality-pq-dest | 🟡 | server-side done, ждёт client-side |
|
||
| MCP-кэш (meta_status) | 🟡 | synced 2026-08-22 22:19 |
|
||
|
||
## Полезные факты (креды/доступы — 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 контейнера. Доступ только через SSH-туннель на books-vds (`~/.ssh/id_ed25519_books_ops`). ⚠️ локальный порт 27017 занят docker-контейнером — туннели на другие порты (37017+).
|
||
- Schedules/migrations: `packages/tools/sched-schedules-create.{slovo,bookva}.cmd` (mongo agendaDb, tz slovo=Europe/Moscow / bookva=UTC).
|
||
|
||
## Не делать (guards)
|
||
- Не диспатчить сборки/деплои books без нового письма — все запрошенные выполнены.
|
||
- Не перезаписывать прод tasks.json сгенерированным — правки точечные, in-place (`sed > tmp && cat tmp > file`, не mv).
|
||
- Не трогать runtime-таски в сторе (fileManaged:false) без команды books.
|
||
- Не чистить legacy agendaJobs без отдельного запроса.
|
||
- Не архивировать handoff-файлы (sliding contract).
|
||
|
||
## Предложено юзеру (не сделано — жду ратификации)
|
||
- Wiki-ingest: краткий concept про sched runtime-таски + инцидент 2026-08-23 (в .admin/.wiki/concepts или shared wiki).
|
||
- Закрытие/нотка на #803 llm-web-proxy (дашборд-фиксы за сессию).
|