handoff: r7 done — репорт 21:17Z, находки F1/F2, приёмка r6 16/16
This commit is contained in:
@@ -1,38 +1,41 @@
|
||||
---
|
||||
_last_updated_: 2026-08-17T20:36:00Z
|
||||
session_id: 2026-08-17-pi-sched-fnf-r6
|
||||
_last_updated_: 2026-08-17T21:20:00Z
|
||||
session_id: 2026-08-17-pi-sched-fnf-r7
|
||||
---
|
||||
|
||||
# Next session handoff
|
||||
|
||||
## Recent commits
|
||||
- `tasks: sched-fnf-r6 — репорт отправлен (99/99 PASS + F1..F10), ждём приёмки`
|
||||
- `tasks: sched-fnf-r7 — репорт отправлен (91/92 PASS + F1/F2), приёмка r6 16/16; ждём разбор`
|
||||
- `tasks: sched-fnf-r6 — репорт отправлен (99/99 PASS + F1..F10), ждём приёмки` (предыдущая)
|
||||
|
||||
## Open треки
|
||||
| Трек | Готовность | Entry-point |
|
||||
|---|---|---|
|
||||
| sched F&F раунд 6 — real runners (ssh/http/storage) | 🟢 репорт отправлен, ждёт приёмки sched | `victor/sched/.agents/inbox/2026-08-17T20-35-00Z-admin-fnf-r6-report.md` |
|
||||
| sched F&F раунд 7 — T1–T5 на живом демоне | 🟢 репорт отправлен 21:17Z, ждёт разбора F1/F2 | `victor/sched/.agents/inbox/2026-08-17T21-17-00Z-admin-fnf-r7-report.md` |
|
||||
| Приёмка r6 (D1/F3/F5/F10) | 🟢 16/16 PASS, включена в репорт r7 | то же письмо |
|
||||
| llm-router рестарт службы + verify routerai | 🔴 ждёт юзера (admin restart) | `.common/lib/llm-router-proxy/` + AppData-копия |
|
||||
|
||||
## Спроси user'а (при следующем контакте)
|
||||
- Перезапусти `llm-router` службу (админская PowerShell) → скажи, проверю probe→routerai (висит с прошлых сессий).
|
||||
- Если sched пришлёт retest-пинг по находкам r6 (F1/D1/F7/F8/F10) — прогони стенд снова.
|
||||
- Если sched пришлёт retest-пинг по находкам r7 (F1/F2) — прогони стенд r7 снова.
|
||||
|
||||
## Не делать (preemptive guards)
|
||||
- **НЕ пушить в victor/sched, НЕ трогать их доску/NEXT_SESSION/wiki** — только письма в их inbox (правило F&F). Inbox gitignored — письмо не коммитится.
|
||||
- **НЕ пушить в victor/sched, НЕ трогать их доску/NEXT_SESSION/wiki** — только письма в их inbox (правило F&F).
|
||||
- Не трогать R2-стенд daemon :8080 (общий регресс-стенд, живёт).
|
||||
- Не писать секреты в этот файл (git-tracked).
|
||||
- БД `sched_r6` на VDS дропнуты после тестов; для повторного прогона — `mk-dbs.mjs` в стенде.
|
||||
- В r7 стенде CLI-демоны убивать через `taskkill //PID <pid> //F //T` (cmd-обёртка не убивает дерево) — в t5 уже исправлено (killTree).
|
||||
|
||||
## Memory updates за сессию
|
||||
- **sched r6 репорт отправлен: 99/99 PASS + находки F1..F10.** Стенд `.admin/.tmp/sched-r2/r6/`.
|
||||
- ssh 25/25 на живом VDS (реальный ключ env + пин + команда). http 29/29 (локальный приёмник, simple/envelope/poll/auth). storage 67/67 на живых БД VDS (MariaDB 11.4 / PG 16.14 / Mongo 7.0).
|
||||
- **F1:** пинг r6 врет про `{"status":"ok"}` — код+дока `succeeded|failed|accepted`.
|
||||
- **D1:** дока 07.storage (стр. ~20,~141) + пинг обещают `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 воркспейса), сигнатуры (pruneRuns {olderThan,temporary}, completeTask optional) только в .d.ts, async-фабрика в сьюте — ловушка.
|
||||
- **F8 (эксперимент):** раннер по одной доке — 15/16: CR-1 баг доки `"schedule":"* * * * *"` строкой невалиден (07.custom.md:105, надо {cron}); CR-2 run() без hooks/onProgress (live-прогресс sync-раннеров недокументирован).
|
||||
- **F9:** mcp-раннер — ниша узкая (MCP-only тулы + вызов без агента в петле), единственный раннер без живого прогона; рекомендация: позиционирование в доке + одна живая таска.
|
||||
- **F10 (от юзера):** admin API+UI — Schedules (и Tasks) не показывают статус последнего рана. `/schedules` не отдаёт lastRunId (admin-api.ts ~367-384), UI колонка «last run» = только timestamp. Поллинг в Tasks/Schedules есть (5с, фикс r3, ui 0.1.10) — не хватает только поля в API + колонки в рендере. Рекомендация: lastRunId+lastRunStatus серверно, колонка «last status» в UI.
|
||||
- `GET /runs/:id` возвращает RunRecord напрямую (не {run}).
|
||||
- Контракт-сьют требует синхронную фабрику (или пре-авайт в своём beforeEach, как у SQL-адаптеров).
|
||||
- **sched r7 репорт отправлен: 91/92 PASS + F1/F2.** Стенд `.admin/.tmp/sched-r2/r7/` (core 0.34.0/daemon 0.1.28/mcp 0.3.9/storage-* 0.2.9/ui 0.1.13, verdaccio latest).
|
||||
- T1 runtime-task-api 23/24: POST /tasks 201/200 upsert (paused preserved), fail-fast 4xx ×4, /tasks/:name/schedule nextRunAt+404.
|
||||
- **F1:** runtime-таска дизаблится следующим syncTasks. Пинг r7 «НЕ дизаблятся (§148)» НЕ прав; 09.admin-api.md §140-141 («disabled by the next sync») + код (`syncTasks` дизаблит всё не из файла) согласны; 03.tasks.md §144-146 («on the next daemon start») вводит в заблуждение — live-sync (runSyncOnce/тик 60с) дизаблит тоже.
|
||||
- T2 run-cancel 17/17: sync-ран 30с → cancel → cancelled, PID реально исчез из tasklist; 409 на завершённом; DELETE active 409 / finished 204+gone. Нюанс: POST /tasks/:name/run для sync-раннеров блокирующий (ждёт финала) — cancel тестил через interval-расписание.
|
||||
- T3 live-sync-recovery 12/12: правка tasks.json подхватывается ≤1с (syncIntervalMs); ghost-ран → cancelled «orphaned run recovered» + лок снят сразу (новый триггер без ожидания lockTtl); битый JSON → демон жив, лог-ошибка, последнее доброе состояние, после починки файла — подхват без рестарта.
|
||||
- T4 log-offset 13/13 sync + 8/8 async: offset 0 = весь лог (log:null), offset N = хвост + logTotalLength, ≥ total = пустой chunk; инкремент жив на async-пути (accepted+poll) — монотонный рост, только новые байты. Sync process-раннер пишет лог по завершении — mid-run читать нечего (by design).
|
||||
- T5 lock-heartbeat 15/15: CLI-демон, lockTtl 20/heartbeat 5/watchdog 2s + sleep-30 sync-ран → на t=21s ровно 1 running, succeeded, лок снят, failCount 0; hard-kill демона → второй инстанс: orphan cancelled + ре-диспатч + ровно 1 active.
|
||||
- **F2:** валидации `--lock-heartbeat < --lock-ttl` НЕТ — `sched --lock-ttl 20 --lock-heartbeat 20` и `30` стартуют. Пинг + 12.cli.md («must be < lock-ttl») + 04.runs.md обещают отказ; в engine.ts (createEngine) и cli.ts (positiveNumber) сравнения нет. Риск: heartbeat ≥ ttl → долгий sync-ран рейпится вотчдогом (тот самый класс бага, ради которого фича). Рекомендация в репорте: throw в createEngine +/или отказ в cli.
|
||||
- T6 chore 3/3: RunnerRunHooks type-only экспорт из published core (в рантайме нет — ожидаемо), tsc --noEmit exit 0 на strict-стенде.
|
||||
- Приёмка r6 16/16: D1 createDaemon({storage}) работает (внешний адаптер, без dbPath); F3 ssh-пин называет received+expected отпечатки; F5 manual → lastRunId/lastRunAt, schedule untouched; F10 lastRunStatus в /schedules+/tasks + UI-колонка «last status» (проверено в published bundle ui 0.1.13).
|
||||
- Харнессы: `t1..t6*.mjs` + `r6-acceptance.mjs` + `long-task.mjs` (воркер, пишет PID). CLI-демоны: `node_modules/.bin/sched.cmd` (shell:true).
|
||||
- r7-пинг ссылался на «core 0.32.0 / daemon 0.1.26», фактически опубликованы 0.34.0 / 0.1.28 (письмо 20:57Z) — это latest, использовал их.
|
||||
|
||||
Reference in New Issue
Block a user