Compare commits

..

2 Commits

2 changed files with 22 additions and 20 deletions

View File

@@ -1,34 +1,35 @@
---
_last_updated_: 2026-08-18T23:00:00Z
session_id: 2026-08-18-pi-sched-openapi-round2-retest
_last_updated_: 2026-08-19T15:20:00Z
session_id: 2026-08-19-admin-alerts-webhook-fnf-r9
---
# Next session handoff
## Recent commits
- d658ff0 (sched repo) feat(examples): admin-client retest vs 0.2.0/0.3.5 — raw_ops deleted, typed-only suite 24/24, smoke 19/19 (пуш в sched разрешён таской)
- e24b100 (sched repo, их) fix(admin-api): openapi F&F round — wrapped shapes, open health, flat schedule
## Что сделано в этой сессии (F&F round 2 retest, письмо sched 19:35Z)
- Ретест против **@sched/admin-api@0.2.0** (tarball spec byte-identical pinned) + **@sched/daemon@0.3.5** (глобальный npm-пакет обновлён, стенд :8127 перезапущен, no auth, scratch db).
- **Все 5 находок F-1..F-5 подтверждены закрытыми** (спека+сервер). Главный итог: **raw_ops.py удалён, 11/11 ранее-сырых операций идут через типизированный клиент** (0 на обходе). Сьют переписан typed-only: **24/24** (3 прогона), **smoke 19/19**.
- F-1/F-5 проверены живьём на keyed-инстансе 0.3.5 (:8128): health 200 open, /tasks 401 без ключа, 400 на неизвестные поля schedule body/patch.
- Репорт: `sched/.agents/inbox/2026-08-18T22-55-00Z-admin-openapi-fixes-round2-retest.md`.
- Нюанс среды (для будущих регенераций): openapi-generator CLI дёргает `java` из **PATH**, не из JAVA_HOME — нужен `$env:Path = "$env:JAVA_HOME\bin;" + $env:Path` (записал в generate.ps1).
- (в `.admin` коммитов в сессии нет — работа ушла в inbox'ы sched-репо)
- Репорт r9: `sched/.agents/inbox/2026-08-19T15-02-00Z-admin-alerts-webhook-fnf-r9.md`
- Их ack r9: `.admin/.agents/inbox/.read/2026-08-19T15-06-45Z-sched-alerts-r9-ack.md`
- Их приёмка openapi r2 (была раньше, нашёл в .read): `2026-08-18T19-57-00Z-sched-openapi-round2-accepted.md`
## Open треки
| Трек | Готовность | Entry-point |
|---|---|---|
| **sched openapi-client F&F round 2** | 🟢 ретест отправлен 22:55Z; жду их приёмки/след. письма | письмо sched 22:55Z |
| **sched F&F r9 webhook alerts** | 🟢 ЗАКРЫТ (их ack 15:06Z, коммит 5024fa1 доковый, ретест не просили) | — |
| **sched openapi-client F&F round 2** | 🟢 ЗАКРЫТ (их приёмка 5/5 уже была в .read — прошлый handoff был стейл, поправил) | — |
| sched CLI-F&F раунд | ✅ ЗАКРЫТ | — |
| **sched F&F r10 per-task alerts** | 🔴 ВОЗВРАЩЕН без теста (17:00Z): доки не сгенерированы (docs/dist пуст), пример createDaemon битый (лишняя скобка, 13.self-hosting.md), коммит не запушен (ahead 2), publish раньше push. Письмо: `sched/.agents/inbox/2026-08-19T17-00-30Z-admin-r10-rejected-docs-not-generated.md`. Код+юнит-тесты+пакеты 0.44.0/0.4.2 — ок (проверено). Ретрай по их ответу | их фикс |
| books-sched-integration (Phase 3) | ⚪ их работа; приёмка только по их пингу | — |
## Стенды
- **:8127** — sched daemon **0.3.5**, no auth, db `/tmp/sched-acpy-stand/acpy.db` (перезапущен мной в этой сессии). ЖИВ — sched может юзать для ретеста; можно гасить.
- :8128 — keyed 0.3.5 (F-1 проверки) — **погашен**.
- :8080 — sched CLI-F&F стенд (0.3.4, SCHED_ADMIN_KEY=dev-key), не трогал.
## Спроси user'а
- (нет на этом раунде)
## Заметки на будущее
- В спеке `info.version` = 0.1.0 и в 0.1.2, и в 0.2.0 (версия только в package.json) — предложил sched поднять, «на усмотрение».
- Wrapped-формы объявлены инлайн в components.responses → имена InlineObject..InlineObject4; если sched назовёт их в components.schemas — станет красивее (предложил).
- Не стал добавлять F-1/F-5 тесты в сьют (нужен keyed-стенд) — предложил sched, «на усмотрение».
## Не делать (preemptive guards)
- НЕ стартовать новый sched F&F-цикл без их пинга.
- НЕ трогать sched public-release таски (готовятся к GitHub-переезду).
- НЕ лазить в sched-репо в рабочем дереве (изменения только через их inbox/доску).
## Memory updates за сессию
- **F&F r9 результаты**: 6/6 лестница + 2 бонус-клейма PASS, багов нет. Замечания: `retry.backoffMs` де-факто required (их фикс: проза доков, `maxAttempts:1`+`backoffMs:0`); «catch-up on creation» — свежие расписания вообще не догоняют прошлые слоты (nextRunAt = будущее), гейт lastRunAt гасит history-less late dispatch (once-расписания с at в прошлом).
- **Рецепт стенда против verdaccio**: проектный `.npmrc` → `@sched:registry=https://verdaccio.kzntsv.site/` (токен уже в `~/.npmrc`), пакеты `@sched/core@0.43.0`/`@sched/daemon@0.4.1`. Приёмник `receiver.mjs` (режимы ok/503/400/seq) лежит в `%TEMP%\sched-alerts-stand\` — переиспользуем.
- **Процесс-раннер sched**: `command[0]` — абсолютный путь (env ребёнка заменяется, PATH не наследуется); node = `C:\nvm4w\nodejs\node.exe`.
- **Бухгалтерия**: r8/r9/openapi-r2 раунды НЕ записаны в `.admin/.tasks/STATUS.md` (верхний блок — r7) — предложено закрытие/запись в ритуале.

View File

@@ -1,4 +1,5 @@
# Admin Task Board
_Updated: 2026-08-19 — 🔴 **[sched-fnf-r10] ВОЗВРАЩЕН без теста** (17:00Z): их пинг r10 (per-task alert routing, core 0.44.0/daemon 0.4.2) — доки не сгенерированы (docs/dist пуст), пример createDaemon в 13.self-hosting.md битый (лишняя `},`, tasks-мапа неоднозначна), коммит не запушен (ahead 2) при опубликованных пакетах (publish раньше push). Код+юнит-тесты+dist пакетов проверены — ок, претензий нет; претензия процессная. Разгромное письмо с порядком хендоффа: `sched/.agents/inbox/2026-08-19T17-00-30Z-admin-r10-rejected-docs-not-generated.md`. Ретрай по их фиксу (push + npm run generate + исправленный пример)._
_Updated: 2026-08-18 — 🧹 гигиена: 4 июльских ⚪-блока флипнуты в 🟢 (уже были закрыты по закрывающим 🟢-блокам/_Updated-логу): imgproxy-stack29-watermark-rollback, minio-variant-cache-bucket, imgproxy-watermark-glyph-books-vds, tandemmebel-sharp-staging-rebuild. Wiki: +2 концепта (nvm-junction-ismain-gate-gotcha, nvm-windows-node-switch)._
_Updated: 2026-08-18 — 🟢 **[sched-fnf-r7] ЗАКРЫТ — приёмка r7-fixed (09-29Z): 61/61 + t1 24/24, обе находки стали фичами.** Версии на стенде sched-r2/r7: core 0.35.0/daemon 0.1.29/mcp 0.3.10/storage-* 0.2.10 (verdaccio latest). F1 (рунтим-таска дизаблилась sync → фича fileManaged): POST /tasks → fileManaged:false, sync её НЕ дизаблит (runSyncOnce, тик-путь), переживает рестарт демона (БД-уровень, sqlite), DELETE /tasks/:name → 204/404, runs удалённой таски сохраняются; регресс file-managed → disabled on removal жив; backfill v0.5→v0.6 (DROP COLUMN → миграция вернула DEFAULT 1, legacy = file-managed, disabled); live-адаптеры mysql/postgres (v3-миграция) + mongo (schemaless, отсутствие поля = managed) — runtime жив, file дизаблится, флаг персистентный. F2 (нет валидации heartbeat → фича): createEngine бросает на lockHeartbeatMs >= lockTtlMs (== и >, сообщение внятное); CLI отказ только при явном флаге, --lock-ttl 20 в одиночку легален (дефолт ttl/3=6666ms в баннере), --poll-timeout явный >= ttl тоже отказ. Доки сверены: 03.tasks.md §149 (убрано «on the next daemon start»), 09.admin-api.md §142-143/151 (+§161 пометка про блокирующий sync-trigger), 12.cli.md (enforced at parse + engine throws). Мелочь «на усмотрение»: в published admin-api.d.ts docstring нет строки DELETE /tasks/:name (поведение+09.admin-api.md правы, одной строки в .d.ts не хватает). Стенд-репро: node r7-fixed-acceptance.mjs (61 проверка, sqlite + live docker mysql/postgres/mongo). Отправлено: projects/sched/.agents/inbox/2026-08-18T09-43-00Z-admin-fnf-r7-accepted.md (r7 закрыт, доску sched не трогал, не пушил)._
_Updated: 2026-08-17 (4) — 🟢 **[sched-fnf-r6] РЕПОРТ ОТПРАВЛЕН (жду приёмки).** Real runners on real infra: ssh 25/25 (VDS, реальный ключ/пин/команда), http 29/29 (локальный приёмник, simple+envelope+poll+auth), storage 45/45 (MariaDB 11.4/Postgres 16/Mongo 7 на VDS, БД sched_r6 дропнуты после). Версии core 0.26.2/daemon 0.1.20/mcp 0.3.1/storage-* 0.2.1. Находки: F1 пинг r6 врет про `{"status":"ok"}` (код+дока: succeeded|failed|accepted); D1 дока 07.storage+пинг обещают `createDaemon({storage})` — daemon 0.1.20 хардкодит sqlite, опции нет (тестил через createEngine); F3 ssh fingerprint-mismatch не называет отпечатки («Host denied (verification failed)»); F4 дока ssh timeoutMs смешивает connect(failed)/command(cancelled); F5 manual trigger не пишет task.lastRunId; F6 у Mongo нет schema_version (by design); F7 эксперимент «адаптер по одной доке» — 31/31 PASS, но дока несамодостаточна (refreshLock: дока 16 методов vs published 0.26.2 = 15, фича в неопубликованном 0.27.0; сигнатуры только в .d.ts; async-фабрика в сьюте — ловушка); F8 эксперимент «runner по одной доке» — 15/16 (CR-1 баг доки: `"schedule": "* * * * *"` строкой невалиден, надо объект {cron}; CR-2 дыра: run() показан без hooks/onProgress — live-прогресс sync-раннеров в доке нет); F9 mcp-раннер — «на усмотрение»: единственный раннер без живого прогона за все раунды, ниша узкая (MCP-only тулы + вызов без агента в петле), рекомендация — честное позиционирование в доке + одна живая таска как валидация; **F10 от юзера: admin API+UI Schedules (и Tasks) не показывают статус последнего рана** — /schedules не отдаёт lastRunId/статус (admin-api.ts ~367), UI колонка «last run» = только timestamp (sched-schedules.ts), рекомендация: lastRunId+lastRunStatus в API, колонка «last status» в UI. Отправлено: `victor/sched/.agents/inbox/2026-08-17T20-35-00Z-admin-fnf-r6-report.md`. Стенд: `.tmp/sched-r2/r6/`._