tasks: sched-fnf-r7 — ЗАКРЫТ: r7-fixed принят (61/61 + t1 24/24), F1/F2 фичи, репорт отправлен
This commit is contained in:
@@ -1,43 +1,18 @@
|
||||
---
|
||||
_last_updated_: 2026-08-17T21:35:00Z
|
||||
session_id: 2026-08-17-pi-sched-fnf-r7
|
||||
_last_updated_: 2026-08-18T09:50:00Z
|
||||
session_id: 2026-08-18-pi-sched-fnf-r7-fixed
|
||||
---
|
||||
|
||||
# Next session handoff
|
||||
|
||||
## Recent commits
|
||||
- `fix: r7-репорт перенесён в правильный инбокс sched/.agents/inbox (был victor/sched — не читался)`
|
||||
- `tasks: sched-fnf-r7 — репорт отправлен (91/92 PASS + F1/F2), приёмка r6 16/16; ждём разбор`
|
||||
- `tasks: sched-fnf-r6 — репорт отправлен (99/99 PASS + F1..F10), ждём приёмки` (предыдущая)
|
||||
- (ожидает коммита) `tasks: sched-fnf-r7 — ЗАКРЫТ: r7-fixed принят (61/61 + t1 24/24), F1/F2 фичи, репорт отправлен`
|
||||
|
||||
## Open треки
|
||||
| Трек | Готовность | Entry-point |
|
||||
|---|---|---|
|
||||
| sched F&F раунд 7 — T1–T5 на живом демоне | 🟢 репорт отправлен 21:17Z, ждёт разбора F1/F2 | `sched/.agents/inbox/2026-08-17T21-17-00Z-admin-fnf-r7-report.md` |
|
||||
| Приёмка r6 (D1/F3/F5/F10) | 🟢 16/16 PASS, включена в репорт r7 | то же письмо |
|
||||
| sched F&F раунд 7 — приёмка r7-fixed (F1 fileManaged / F2 lock-heartbeat validation) | 🟢 **r7 ЗАКРЫТ** — 61/61 PASS (r7-fixed-acceptance.mjs) + t1 24/24; репорт `projects/sched/.agents/inbox/2026-08-18T09-43-00Z-admin-fnf-r7-accepted.md`; мелочь «на усмотрение»: admin-api.d.ts docstring без строки DELETE /tasks/:name | `sched/.agents/inbox/.read/2026-08-18T09-29-00Z-sched-fnf-r7-fixed.md` |
|
||||
| llm-router рестарт службы + verify routerai | 🔴 ждёт юзера (admin restart) | `.common/lib/llm-router-proxy/` + AppData-копия |
|
||||
|
||||
## Спроси user'а (при следующем контакте)
|
||||
- Перезапусти `llm-router` службу (админская PowerShell) → скажи, проверю probe→routerai (висит с прошлых сессий).
|
||||
- Если sched пришлёт retest-пинг по находкам r7 (F1/F2) — прогони стенд r7 снова.
|
||||
|
||||
## Не делать (preemptive guards)
|
||||
- **НЕ пушить в sched, НЕ трогать их доску/NEXT_SESSION/wiki** — только письма в их inbox (правило F&F).
|
||||
- **⚠️ Инбокс sched — только `C:/Users/vitya/projects/sched/.agents/inbox/`** (НЕ `victor/sched/` — там ничего не читается; урок r7, репорт пришлось переносить).
|
||||
- Не трогать R2-стенд daemon :8080 (общий регресс-стенд, живёт).
|
||||
- Не писать секреты в этот файл (git-tracked).
|
||||
- В r7 стенде CLI-демоны убивать через `taskkill //PID <pid> //F //T` (cmd-обёртка не убивает дерево) — в t5 уже исправлено (killTree).
|
||||
|
||||
## Memory updates за сессию
|
||||
- **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, использовал их.
|
||||
- ничего по sched (раунд закрыт); llm-router — если ещё актуально
|
||||
|
||||
@@ -1,5 +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-колонка ✅. Отправлено: `sched/.agents/inbox/2026-08-17T21-17-00Z-admin-fnf-r7-report.md` (включает приёмку r6). ⚠️ Изначально положил в `victor/sched/` — не тот инбокс, sched молчал; перенёс в `projects/sched/.agents/inbox/` (правильный канал, там .read со всеми прошлыми репортами)._
|
||||
_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/`._
|
||||
_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`.
|
||||
|
||||
Reference in New Issue
Block a user