From 3fac48e66959dd99de07a4ab8195f7b69433bbe5 Mon Sep 17 00:00:00 2001 From: vitya Date: Sun, 23 Aug 2026 14:33:21 +0300 Subject: [PATCH] docs(handoff): books sched spin incident closed + LWP dashboard fixes (v0.1.13-15) --- .tasks/NEXT_SESSION.md | 69 ++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/.tasks/NEXT_SESSION.md b/.tasks/NEXT_SESSION.md index 5939d69..11ce9a0 100644 --- a/.tasks/NEXT_SESSION.md +++ b/.tasks/NEXT_SESSION.md @@ -1,40 +1,51 @@ --- -_last_updated_: 2026-08-23T09:40:00Z -session_id: books-deploy-done-2026-08-23 +_last_updated_: 2026-08-23T11:32:43Z +session_id: books-incident-sched-spin-closed-2026-08-23 --- # Next session handoff -## Recent commits -- `6bd8781b` docs(handoff): books disable-legacy-task-runs-writes deploy DONE (base 0.11.0, images, VDS cleanup, verified) -- `551fd0c2`+`2b82a83c` meta(handoff): v2 migration fully complete (847 задач, counter=966) — прошлая сессия +## Что сделано в этой сессии (всё закрыто) -## Open треки -| Трек | Готовность | Entry-point | +### LWP (llm-web-proxy) — дашборд, 3 фикса (v0.1.13→v0.1.15, запушены, сервер перезапущен) +- **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**: убран лишний суффикс «м». +- Локальный репо: `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). + +## Открытые треки +| Трек | Статус | Entry-point | |---|---|---| -| **books deploy.yml CORE_SHA gap** (новое) | 🔴 не починено | deploy.yml седит только `__TAG__`, bookva-overlay compose использует `${CORE_SHA}` → bookva sched-deploy падает (PUT 400). Рабочий костыль: CORE_SHA=master в env стека 51 (уже добавлен). Фикс: инъекция CORE_SHA в deploy.yml ИЛИ перевод overlay-compose на `__TAG__`. Решить: админ или books? | -| **sched live-sync не сработал на file-change** (новое) | 🔴 непроверено | После правки прод tasks.json демоны держали таску активной ~5 мин → потребовался `docker restart books-sched bookva-sched`. Либо доки sched неточны, либо sync требует триггера. Проверить против sched docs 03.tasks.md | -| books task #2 (disable-legacy-task-runs-writes) | 🟢 задеплоен+проверен | Закрытие — на books-доске (их задача); отчёт: `books/.agents/inbox/2026-08-23T09-36-00Z-admin.md` | -| meeting-room — merge-conflict (UU) | 🟡 | Разрешить → миграция 2 тасок + 12 файлов (номера 967+) | +| 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 риск; решение за оператором | -| projects-meta-mcp (архив) / yt-tools (untracked) / projects-wiki (дубль) | ✅ скипы | согласованы ранее | -| MCP-кэш (meta_status) | 🟡 stale | synced 2026-08-22; проверить `meta_status` | -| [#803 llm-web-proxy] (доска) | 🔴 active | next action в блоке STATUS.md (executors/translators из omniroute) | +| [#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 | -## Спроси user'а -- CORE_SHA-фикс deploy.yml: делаю я (admin) или отдать books (рекомендую books — их workflow)? -- Закрытие books #2 — books-агент закроет сам по моему отчёту; если не закроет за N дней — пингануть. -- Ранее открытые решения (перенесены): судьба coworker-skill push; закрывать ли llm-web-proxy-qwen-web. +## Полезные факты (креды/доступы — 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). -## Не делать (preemptive guards) -- Не диспатчить сборки/деплои books без нового письма от books — деплой выполнен и проверен. -- Не включать `SCHED_LEGACY_TASK_RUNS` (дефолт off = in-memory envelope). -- Не перезаписывать прод tasks.json сгенерированным (правки точечные; бэкапы `.bak-*` на books-vds). -- Не трогать runtime-таски в sched-сторе (напр. «ozon stocks syncronization» ~65с) — пре-экзистинг, вне скоупа. -- Не архивировать handoff-файлы (sliding contract, история — git log). +## Не делать (guards) +- Не диспатчить сборки/деплои books без нового письма — все запрошенные выполнены. +- Не перезаписывать прод tasks.json сгенерированным — правки точечные, in-place (`sed > tmp && cat tmp > file`, не mv). +- Не трогать runtime-таски в сторе (fileManaged:false) без команды books. +- Не чистить legacy agendaJobs без отдельного запроса. +- Не архивировать handoff-файлы (sliding contract). -## Memory updates за сессию -- `sched-daemon:0.11.0` собран и в registry (base, apps/daemon, BuildKit secret, history 0 JWT). -- deploy.yml vs bookva `${CORE_SHA}` — известная несовместимость (см. Open треки). -- sched live-sync не реагирует на file-change tasks.json → рестарт демона перечитывает. -- Паттерн верификации envelope-фикса: task_runs MAX(created_at) должен остановиться на моменте старта нового контейнера (slovo 09:21:08→start 09:21:10; bookva 09:20:01→09:23:11). +## Предложено юзеру (не сделано — жду ратификации) +- Wiki-ingest: краткий concept про sched runtime-таски + инцидент 2026-08-23 (в .admin/.wiki/concepts или shared wiki). +- Закрытие/нотка на #803 llm-web-proxy (дашборд-фиксы за сессию).