tasks: sched-fnf-r7 — репорт отправлен (91/92 PASS + F1/F2), приёмка r6 16/16; ждём разбор

This commit is contained in:
2026-08-18 00:18:46 +03:00
parent 33b70aefe2
commit 54f5f93d80

View File

@@ -1,4 +1,5 @@
# Admin Task Board
_Updated: 2026-08-17 (5) — 🟢 **[sched-fnf-r7] РЕПОРТ ОТПРАВЛЕН (91/92 + F1/F2) + приёмка r6 (16/16).** Стенд `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, sched подтвердил 20:57Z). T1 runtime-task-api 23/24 + **F1**: runtime-таска дизаблится следующим syncTasks — пинг r7 «НЕ дизаблятся (§148)» НЕ прав; 09.admin-api.md §140 «disabled by the next sync» + код согласны; 03.tasks.md «on the next daemon start» вводит в заблуждение (live-sync дизаблит тоже). T2 run-cancel 17/17 — cancel реально убивает воркер (проверено по tasklist), DELETE 409/204. T3 live-sync-recovery 12/12 — правка tasks.json ≤1с без рестарта, ghost→cancelled+лок сразу, битый файл→живёт+восстанавливается. T4 log-offset 13/13 sync + 8/8 async — инкремент на accepted+poll монотонный. T5 lock-heartbeat 15/15 (долгий sync-ран 30с при lockTtl 20 переживает, второй инстанс ре-диспатчит без параллели) + **F2**: валидации `--lock-heartbeat < --lock-ttl` НЕТ`sched --lock-ttl 20 --lock-heartbeat 20/30` стартует, пинг+12.cli+04.runs обещают отказ (в engine/cli сравнения нет). T6 chore 3/3 — RunnerRunHooks type-only из published, tsc exit 0. Приёмка r6: D1 createDaemon({storage}) ✅, F3 пин называет отпечатки ✅, F5 manual→lastRunId+schedule untouched ✅, F10 lastRunStatus в /schedules+/tasks+UI-колонка ✅. Отправлено: `victor/sched/.agents/inbox/2026-08-17T21-17-00Z-admin-fnf-r7-report.md` (включает приёмку r6)._
_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/`._
_Updated: 2026-08-17 — 🟢 **[sched-fnf-r4] ЗАКРЫТ (5/5 + находки A/B/C починены, core 0.25.0/daemon 0.1.18).** Run-метаданные (trigger/triggeredBy/temporary/retryOf), trigger-only, manual retry (`POST /runs/:id/retry`), auto-retry линковка, retention — всё зелёное (43 чек-пойнта). Находки: A) syncTasks disable-on-remove (removed → disabled, док стал правдой); B) `POST /tasks/:name/run` с `{temporary?, data?}`; C) `--help` дефолты. Перетест 12/12. Репорты: `victor/sched/.agents/inbox/2026-08-17T16-02-00Z-*-report.md` + `…T16-09-00Z-*-retest-report.md`. Стенд `.admin/.tmp/sched-r2/r4/`._
_Updated: 2026-08-17 (3) — 🟢 **[sched-fnf-r5] ЗАКРЫТ (7/7 + A/B/C приняты).** allowedTools sandbox (core 0.26.2/mcp 0.3.1/daemon 0.1.20). Перетест B после второго захода: **18/18 PASS**. A) ssh ceiling fail-fast на load — подтверждено 4/4 (нюанс порядка shape-vs-ceiling принят «по желанию», перестановка при след. касании ssh); B) mcp bare http spec — оба дефекта починены: daemon 0.1.20 перепинен на `@sched/mcp:^0.3.1` (вложенная 0.3.0 ушла, daemon грузит 0.3.1), хитристика ловит `host:port` (их кейс #2 дословно: `https://127.0.0.1:1` → throw; ceiling и per-task → load-отказ «must include a tool dimension»; `host:port:tool`/`npx*:read_*` валидны); C) дока. Регресс process/opt-in жив. Ретест: `r5-retest-ab.mjs`. Репорт: `victor/sched/.agents/inbox/2026-08-17T17-27-12Z-admin-fnf-r5-accepted.md`.
@@ -1883,13 +1884,14 @@ Rollback: вернуть прежний образ стека либо реве
---
## [sched-fnf-r7] — F&F раунд 7: T1T5 на живом демоне — runtime-task-api (POST /tasks, POST /tasks/:name/schedule), run-cancel (POST /runs/:id/cancel, DELETE active → 409), live-sync-recovery (sync 60с без рестарта, ghost-recovery, битый tasks.json), run-log-offset (GET /runs/:id?logFromOffset=N), lock-heartbeat (--lock-heartbeat, долгий sync-ран > lockTtl) + chore: RunnerRunHooks из @sched/core, typecheck-гейт чистый. Версии (после репаблиша): core 0.32.0 / daemon 0.1.26 / mcp 0.3.7 / storage-* 0.2.7. Чек-листы и формат репорта — в пинг-письме. Старт после приёмки r6 (репорт 20:35Z получен, находки F1F10 разбираем).
## 🟢 [sched-fnf-r7] — F&F раунд 7: T1T5 на живом демоне — runtime-task-api (POST /tasks, POST /tasks/:name/schedule), run-cancel (POST /runs/:id/cancel, DELETE active → 409), live-sync-recovery (sync 60с без рестарта, ghost-recovery, битый tasks.json), run-log-offset (GET /runs/:id?logFromOffset=N), lock-heartbeat (--lock-heartbeat, долгий sync-ран > lockTtl) + chore: RunnerRunHooks из @sched/core, typecheck-гейт чистый. Версии (после репаблиша): core 0.34.0 / daemon 0.1.28 / mcp 0.3.9 / storage-* 0.2.9 / ui 0.1.13 (sched подтвердил 20:57Z). Чек-листы и формат репорта — в пинг-письме.
**Status:** ready
**Where I stopped:** (not started) — ждёт приёмки r6 (репорт 2026-08-17T20-35Z, находки F1F10 уходят в фичи).
**Next action:** прочитать пинг-письмо sched-fnf-r7-ping в .agents/inbox/ → стенд sched-r2/r7 на свежих версиях из verdaccio → чек-листы (runtime-task-api → run-cancel → live-sync-recovery → run-log-offset → lock-heartbeat → chore) → репорт в инбокс victor/sched (что делал → что ожидал → что получил → раздел доки; «на усмотрение» тоже).
**Status:** done
**Where I stopped:** DONE 2026-08-17: стенд `sched-r2/r7` на новых версиях (verdaccio latest). Репорт 21:17Z в инбокс victor/sched (`.agents/inbox/2026-08-17T21-17-00Z-admin-fnf-r7-report.md`). **91/92 PASS + находки F1, F2.** Приёмка r6 (D1/F3/F5/F10) тоже в этом письме: 16/16 PASS. T1 runtime-task-api 23/24 (F1: runtime-таска дизаблится следующим syncTasks — пинг «НЕ дизаблятся» не прав; 09.admin-api.md «disabled by the next sync» + код правы; 03.tasks.md «on the next daemon start» вводит в заблуждение — live-sync дизаблит тоже). T2 run-cancel 17/17 (cancel реально убивает воркер — проверено по tasklist). T3 live-sync-recovery 12/12 (правка tasks.json ≤1с, ghost→cancelled+лок сразу, битый файл→живёт). T4 log-offset 13/13 sync + 8/8 async (инкремент на accepted+poll, монотонно). T5 lock-heartbeat 15/15 (долгий sync-ран > lockTtl жив, второй инстанс ре-диспатчит без параллели) + **F2: валидации `--lock-heartbeat < --lock-ttl` НЕТ — демон стартует при 20/20 и 30/20, пинг/доки 12.cli+04.runs обещают отказ** (в engine/cli нигде не проверяется). T6 chore 3/3 (RunnerRunHooks type-only из published, tsc exit 0).
**Next action:** ждём разбор r7 (F1/F2 → фичи) + приёмку. Стенд-репро: `cd .admin/.tmp/sched-r2/r7 && node t{1..6}*.mjs && node r6-acceptance.mjs`.
**Branch:** n/a
**Notify:** victor/sched
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: victor/sched / 2026-08-17T20:36:56.320Z -->
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-08-17T21:17:xxZ / note: репорт r7 + приёмка r6 отправлены 21:17Z, 91/92 + F1/F2 -->
---