diff --git a/.tasks/NEXT_SESSION.md b/.tasks/NEXT_SESSION.md index 70f691f..a68297a 100644 --- a/.tasks/NEXT_SESSION.md +++ b/.tasks/NEXT_SESSION.md @@ -1,59 +1,45 @@ --- -_last_updated_: 2026-08-16T12:50:00Z +_last_updated_: 2026-08-16T14:45:00Z session_id: 2026-08-16-sched-fnf-kickoff --- # Next session handoff -## 🔴 Следующая сессия: F&F-тестирование sched — таска №1 `dir-size-watch` (старт одобрен vitya) +## Состояние: F&F-цикл sched ЗАКРЫТ (4/4 приняты) — ждём раунд 2 (docs-review) -Вводное письмо sched: `.admin/.agents/inbox/.read/2026-08-16T12-36-34Z-sched-fnf-intro.md`. Мы — первый внешний тестер sched перед продакшеном. **Решаем реальные таски, читая доки самостоятельно** — доки (`docs/content/docs/` в victor/sched, 01.introduction → 12.logging) и есть предмет теста. +**Сводка F&F** (эта сессия, 12:50Z–14:42Z): 4 таски → 4 приёмки, **6 фидбеков → 6 фич**: +1. `createDaemon` import — exports-map `@sched/daemon` (0.1.2) +2. UI-бандл 404 — UI отдельным пакетом `@sched/ui` + бин `sched-ui serve` (0.1.1), daemon headless (`--admin-static` выпилен) +3. UI без токена — токен-бокс в морде (localStorage `sched-token` + `?token=`) +4. Allowlist на dispatch — `Runner.validateConfig`-хук, валидация на load (core 0.12.2) +5. ntfy только Bearer — basic `user`+`password` в createAlerts (core 0.12.2) +6. pollTimeoutMs не в daemon — `DaemonOptions.pollTimeoutMs/pollIntervalMs` + CLI `--poll-timeout` (daemon 0.1.4) -**№1 `dir-size-watch`** (доска victor/sched, ⚪ ready): -- Раз в 6 часов посчитать размер каталога (предлагается `C:\sites\snolla\App_Data`, можно свой) → отправить результат в ntfy-топик (напр. `sched-fnf`). -- Превышение порога → отдельное алерт-сообщение. -- Проверить историю ранов в admin UI. -- **Путь решения выбираем сами** — это и есть тест доков. +Версии: **core 0.12.2 / daemon 0.1.4 / ui 0.1.1 / mcp 0.1.1**, сьют 363 ✓. -**Отчёт** (в письме sched): косяк доки/кода/непонятное место → письмо в `victor/sched/.agents/inbox/` (файл + коммит в их репо? — sched пишет «коммит», уточнить механизм при первой отправке; мы писали файлом в `.agents/inbox/`, gitignored — sched-монитор подхватывает). Формат: что делал → что ожидал → что получил → ссылка на раздел доки. Гладкое — пара строк тоже. **Мутации разрешены** (vitya подтвердил): таски могут слать письма vitya, класть артефакты в minio. +## 🔴 Следующая сессия: раунд 2 — docs-review после storage-сплита (пинг от sched) -**Таски выдаются по одной** — после приёмки №1 придёт №2 (docker-runner → async/poll → custom/embedded). +Порядок (согласован письмом 14:41Z, ack 14:42Z): **storage-сплит (SQLite из коробки, MySQL/PG/Mongo — отдельные пакеты) → полировка доков → пинг в инбокс → наше ревью**. -## Контекст этой сессии (sched-инбокс) +- Формат: что делал → что ожидал → что получил → ссылка на раздел доки. +- Фокусы (зафиксированы sched'ом как их чек-лист): **02.quick-start** (все три пути после сплита), **07.storage.md** (выбор адаптера), **10.cli.md / 13.ui.md** (если поверхность менялась). +- Репорты → `victor/sched/.agents/inbox/` (файл, gitignored — их монитор подхватывает). -- Верифицировал ответ sched на моё peer-ревью (11:10Z): `0ce7e66`, сьют 345 ✓, typecheck чист, 🔴-фиксы в коде подтверждены (polling-guard, triggerTask enqueued?, tick error-boundary). -- Решение vitya по `review-poll-timeout-vs-lockttl`: сделать запас — дефолт `pollTimeoutMs` 25min < `lockTtlMs` 30min. **Сделано мной напрямую в victor/sched** (коммит `8c1e8da`, core 0.12.1, сьют 346 ✓) — vitya отчитал за прямое редактирование чужого репо, извинение sched отправлено (`.agents/inbox/2026-08-16T12-43-20Z-admin.md`). **Правило на будущее: решение по чужому репо → таска на их доску, делают они.** -- Готча: публикация в verdaccio ушла со stale-dist (билд не пересобран) → 409, unpublish + rebuild + republish. **Перед publish: `yarn build` + проверка dist.** +## Контекст для ревью (накопленное знание) -## Recent commits (admin) -- (эта сессия — коммитов в .admin нет; работа велась в victor/sched: `8c1e8da`) -- `71a8a607` chore(ops): pilonuxt restart — content-api viewModel cache reset, volume_price renders -- `5b3a1b2f` chore(deploy): pilonuxt 64c2539 LIVE — admin-api 0.11.0 array-canon -- `3133c0e8` chore(deploy): pilonuxt 1128ddc LIVE — core 0.26.7 fixes new-products 500 -- `070431df` chore(deploy): pilonuxt f876e70 LIVE — remaining 3 catalog placeholders -> real photos -- `694a4a96`, `c860da3f`, `b9a626e6`, `ac647241`, `a21b0491` — см. git log +- Стенд F&F: `.admin/.tmp/sched-fnf-01/` — daemon.js (custom runner dirSizeWatch), daemon2.js (docker), daemon3.js+worker.js (async/poll), embedded4.mjs (embedded+alerts+retry). Фоновые процессы убиты. sched.db/sched2.db/sched3.db/sched4.db — история ранов. +- Пакеты установлены в стенде из verdaccio (registry `https://verdaccio.kzntsv.site/`, npmrc с токеном). +- ntfy: `ntfy.vds.kzntsv.site`, basic auth vitya (pass `vds-kzntsv/full-env`), топик `sched-fnf` (admin role → любой топик). +- kreknin SSH: `vitya@195.19.90.188`, ключ `~/.ssh/id_ed25519_kreknin`, бэкапы `/volume1/NetBackup/{vds-kzntsv,books-vds}/latest`. +- **Правило (рявк 12:46Z): НЕ пушить в victor/sched, НЕ трогать их доску/NEXT_SESSION/wiki. Всё — письмом в их инбокс.** -## Open треки +## Open треки (не sched) | Трек | Готовность | Entry-point | |---|---|---| -| **sched F&F №1 dir-size-watch** (см. блок выше) | ⚪ ready, ждёт новую сессию | `victor/sched/.tasks/STATUS.md` + `.agents/inbox/.read/2026-08-16T12-36-34Z-sched-fnf-intro.md` | -| pilonuxt prod (стек 16) — **образ `64c2539`** (admin-api 0.11.0 array-canon), откаты: `1128ddc`→`f876e70`→`24a13da`→`40806b1`→`340c0e7`→`8b7e8c4` | 🟢 live | `host-stacks/vds-kzntsv/pilonuxt.compose.yml` + `apps/web/.wiki/concepts/docker-deploy.md` (монорепа) | -| loader-new-products (монорепа) — закрыта прогером 🟢 | done | `.tasks/STATUS.md` монорепы | +| pilonuxt prod (стек 16) — образ `64c2539`, откаты: `1128ddc`→`f876e70`→`24a13da`→`40806b1`→`340c0e7`→`8b7e8c4` | 🟢 live | `host-stacks/vds-kzntsv/pilonuxt.compose.yml` | | pilorama-yandex-business-renewal — ответ Анастасии **до 17.08** | 🔴 active | `.tasks/STATUS.md` монорепы | | pilorama-seo-crawl-audit — GSC-замер через 2-4 нед | 🔴 active | `.tasks/STATUS.md` монорепы | +| storage-сплит sched (у них) → docs-review (у нас) | ⚪ ждёт пинг | `victor/sched/.agents/inbox/` | ## Спроси user'а -- F&F №1: каталог для замера — `C:\sites\snolla\App_Data` (как предлагает sched) или свой? Порог алерта — какой? -- (если придёт письмо от прогера с новым sha) — пересборка стека 16 по обычной схеме: ff-merge → build (secret verdaccio_token) → push → Portainer PUT (скрипт `.tmp/redeploy-stack16.ps1 -OldTag X -NewTag Y`, пароль из `pass vds-kzntsv/full-env` PORTAINER_ADMIN_PASS) → verify мимо LAN-DNS (`--resolve 89.253.255.94`). -- Простые рестарты (без пересборки) — `.tmp/restart-stack16.ps1`. - -## Не делать (preemptive guards) -- НЕ редактировать victor/sched напрямую по своим решениям — только через таски на их доску (см. инцидент этой сессии). -- НЕ деплоить/рестартить pilonuxt без письма от прогера или слова vitya. -- НЕ трогать контент CMS (MoreThenCms) — прогер работает с данными через admin-api/loader. -- НЕ писать в монорепу pilorama98.ru (`.tasks`/`.wiki`) без явного запроса — прогер ведёт свою сторону сам. - -## Memory updates за сессию -- (эта сессия — wiki-ингест НЕ делался; кандидаты на промоушен в shared-wiki см. предложение в чате: verdaccio stale-dist gotcha + inbox-reply конвенция) -- NEW `concepts/pilonuxt-restart-vs-redeploy-2026-08-16.md` — семантика рестарт vs деплой на стеке 16 (in-memory viewModel кэш content-api сбрасывается рестартом; деплой — только для кода). +log.md +index.md. -- Монорепа (прогер): `lazy-data-not-found-404.md` (soft-404 fix), `admin-api-content-wire.md` (array-canon 0.11.0), `cms-edits-cache-restart.md`, `v-html-on-component-ssr.md`, `admin-api-content-edit.md` — заингестено его стороной, НЕ дублировать. +- F&F закрыт, раунд 2 зарегистрирован. Если до пинга sched появится другая работа (pilorama/монорепа) — обрабатывать по обычной схеме. diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 181c79f..9e7818f 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -1,5 +1,5 @@ # Admin Task Board -_Updated: 2026-08-16 (14) — 🟢 **[sched-fnf-04-embedded-alerts] ACCEPTED — F&F цикл закрыт.** Приёмка №4 (14:40Z): замечаний нет. Итоги sched: 6 багов/пробелов → 6 фич (exports-map 0.1.2, @sched/ui serve 0.1.1 + токен-бокс, validateConfig 0.12.2, ntfy basic 0.12.2, pollTimeoutMs 0.1.4). Версии: core 0.12.2 / daemon 0.1.4 / ui 0.1.1 / mcp 0.1.1, сьют 363 ✓. У них дальше: storage-сплит (по фидбеку) + полировка доков; приглашение на след. раунд — инбокс открыт. +_Updated: 2026-08-16 (14) — 🟢 **[sched-fnf-04-embedded-alerts] ACCEPTED — F&F цикл закрыт.** Приёмка №4 (14:40Z): замечаний нет. Итоги sched: 6 багов/пробелов → 6 фич (exports-map 0.1.2, @sched/ui serve 0.1.1 + токен-бокс, validateConfig 0.12.2, ntfy basic 0.12.2, pollTimeoutMs 0.1.4). Версии: core 0.12.2 / daemon 0.1.4 / ui 0.1.1 / mcp 0.1.1, сьют 363 ✓. У них дальше: storage-сплит (по фидбеку) + полировка доков; раунд 2 согласован: docs-review после storage-сплита + полировки (пинг от sched, формат делал/ожидал/получил/раздел, фокусы: quick-start все пути, 07.storage, 10.cli, 13.ui) _Updated: 2026-08-16 (13) — 🟢 **[sched-fnf-03-async-poll] ACCEPTED + 🟡 [sched-fnf-04-embedded-alerts] DONE (репорт отправлен).** Приёмка №3 (14:31Z): pollTimeoutMs проброшен в daemon (0.1.4, +pollIntervalMs, CLI --poll-timeout), доки 10.cli.md/05.protocol.md. №4 embedded (финальная): createEngine+internal runner+sqlite+syncTasks в одном скрипте — реальная проверка свежести бэкапов kreknin по SSH (vds-kzntsv 12.4h / books-vds 11.4h → succeeded; порог 1h → failed «STALE backups»); retry 3x (a1 fail → a2 fail → a3 succeed, triggerTask не ретраится — доки честны); createAlerts ntfy **basic auth работает** («[sched] backup-freshness failed» в топике). Цикл F&F закрыт, замечаний нет. Репорт: `victor/sched/.agents/inbox/2026-08-16T14-36-01Z-admin-fnf-04-report.md`._ _Updated: 2026-08-16 (12) — 🟢 **[sched-fnf-02-docker-runner] ACCEPTED + 🟡 [sched-fnf-03-async-poll] DONE (репорт отправлен).** Приёмка №2 (14:24Z): оба замечания стали фичами — validateConfig-хук (allowlist на load, abort при старте, core 0.12.2) + ntfy basic auth (user+password в createAlerts, daemon 0.1.3), сьют 362 ✓. №3 async/poll: свой воркер (:8293) envelope accepted+poll — happy path queued→running(50)→succeeded (progress 100, 3.5s), timeout-кейс hung → failed «poll timeout after 15000ms» (через createEngine, т.к. daemon не пробрасывает pollTimeoutMs — замечание в репорт). Фиксы №2 подтверждены (abort на load + ntfy basic в коде). Репорт: `victor/sched/.agents/inbox/2026-08-16T14-27-54Z-admin-fnf-03-report.md`._ _Updated: 2026-08-16 (11) — 🟢 **[sched-fnf-01-dir-size-watch] ACCEPTED + 🟡 [sched-fnf-02-docker-runner] DONE (репорт отправлен).** Приёмка №1 (13:54Z): 3 бага дистрибутива починены — exports-map `@sched/daemon` (0.1.2), UI в `@sched/ui` 0.1.1 с бином `sched-ui serve` (daemon headless, --admin-static удалён), токен-бокс в морде, /api/health доки. №2 docker-runner: one-shot alpine:3.20 `wget --spider` на pilorama98.ru → ntfy sched-fnf, exit code → status (0=succeeded / 1=failed+алерт). Обе ветки + allowlist (busybox → fail-fast «not in allowlist», контейнер не спавнился) + новый UI (sched-ui serve --proxy, токен-бокс localStorage, Runs=2). Репорт: `victor/sched/.agents/inbox/2026-08-16T14-17-55Z-admin-fnf-02-report.md`. 2 замечания: allowlist проверяется на dispatch не на load (доки 03.tasks.md обещают load-time validation); createAlerts ntfy только Bearer, basic не поддержан._