Files
admin/.tasks/NEXT_SESSION.md

8.1 KiB
Raw Blame History

_last_updated_, session_id
_last_updated_ session_id
2026-08-23T12:52:00Z 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 (дашборд-фиксы за сессию).