admin: closing ritual — wiki concept fnf-testing-method (+index/log), STATUS.md бухгалтерия r8/r9

This commit is contained in:
2026-08-19 20:28:14 +03:00
parent 64fea70dec
commit cbd22be2a2
4 changed files with 61 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
# Admin Task Board
_Updated: 2026-08-19 — 🟢 **[sched-fnf-r10] ЗАКРЫТ (их ack 17:24Z): 6/6 PASS, 0 находок, 0 замечаний** — первый раунд без фиксов после режекта. Per-task alert routing (core 0.44.0/daemon 0.4.2): r10-a регресс, r10-b on:[] тишина (массивы replace), r10-c per-task on, r10-d per-task onMissed (missed-slot только для A, delayMs 129016), r10-e мультиканал (+без корневого webhook), r10-f fail-fast на load (3 варианта). Бонус HMAC MATCH. Процесс: раунд начинался с режекта (доки не сгенерированы/битый пример/не запушено), их фикс + push + сгенерированный dist + исправленный пример → ретест 6/6. Урок: F&F тестируется по СКОМПИЛИРОВАННОЙ доке (dev-сервер localhost:5108), не по сырцам; порядок хендоффа 16 у них в fnf-testing-procedure.md. Репорт: sched/.agents/inbox/2026-08-19T17-24-00Z-admin-fnf-r10-report.md. Стенд: /tmp/sched-alerts-stand/r10/._
_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-19 — 🟢 **[sched-fnf-r9] ЗАКРЫТ (их ack 15:06Z, ретест не просили) — бухгалтерия.** Webhook-алерты (core 0.43.0/daemon 0.4.1): лестница 6/6 + 2 бонус-клейма PASS, багов нет. Замечания (их фикс — проза доков): `retry.backoffMs` де-факто required (`maxAttempts:1`+`backoffMs:0`); «catch-up on creation» — свежие расписания не догоняют прошлые слоты (nextRunAt = будущее), гейт lastRunAt гасит history-less late dispatch. Репорт: sched/.agents/inbox/2026-08-19T15-02-00Z-admin-alerts-webhook-fnf-r9.md._
_Updated: 2026-08-18 — 🟢 **[sched-fnf-r8] ЗАКРЫТ (приёмка №5 UI, U1U4 закрыты, ui 0.2.1→0.2.3) — бухгалтерия.** Schedule-as-entity (core 0.40.2/daemon 0.3.0/storage-* 0.3.1/ui 0.2.0): 15 репро-скриптов, №4 admin-api 52/52 (F1 tz-hoist, F3 PATCH-merge), №5 UI 13/13 (находки U1 форма-tz→400, U2 вёрстка ~58px). Подтверждённый контракт и карта стенда: .wiki/concepts/sched-fnf-r8-verification-stand.md._
_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/`._

View File

@@ -0,0 +1,57 @@
---
title: "sched F&F — метод тестирования: скомпилированная дока + порядок хендоффа"
type: concept
tags: [sched, fnf, testing, docs, methodology, handoff]
sources: []
related: [concepts/sched-fnf-r8-verification-stand.md, concepts/sched-admin-client-openapi.md]
updated: 2026-08-19
---
# sched F&F — метод тестирования
Урок раунда r10 (2026-08-19, режект → фикс → ретест 6/6). Правила тестирования
в кросс-агентном цикле F&F против sched-команды. Применимо к любому следующему раунду.
## 1. Тестируем по СКОМПИЛИРОВАННОЙ доке, не по сырцам
- «Публичная дока» текущего этапа = **скомпилированная дока на дев-сервере**
`http://localhost:5108` (nuxi dev, биндится на IPv6 `[::1]` — открывать localhost,
НЕ 127.0.0.1). Роуты: `/docs/tasks`, `/docs/self-hosting` и т.д.
- НЕ тестировать по `docs/content/docs/*.md` в рабочем дереве — тогда битый билд,
пустой dist, мёртвый/устаревший рендер проскочат незамеченными. Дока как артефакт —
часть предмета теста.
- `schedjs.com` — заглушка конфига (NXDOMAIN, домен не зарегистрирован), проект никуда
официально не публиковался. Деплой на публичный URL НЕ требовать — это вопрос фазы
публикации и решение владельца.
## 2. Порядок хендоффа sched F&F (их процедура, fnf-testing-procedure.md)
Проверять ВСЕ 6 пунктов ПЕРЕД первым прогоном. Любой пропуск = возврат без теста:
1. Код + юнит-тесты.
2. Доки source — примеры парсятся (битый пример = возврат; в r10 был сломанный
`createDaemon({ alerts })` — лишняя `},`, `tasks`-мапа неоднозначно вложена).
3. `npm run generate` в `docs/``docs/dist` не пуст и закоммичен. ⚠️ Гоча: nuxi
сам создаёт `docs/dist` как **symlink** на `.output/public` — «0 байт», в git не
попадает; у них закрыто `scripts/docs-dist.mjs` (после generate заменяет симлинк
реальной копией) + `!docs/dist/` в .gitignore.
4. `git push` — ноль ahead (тестируем то, что в origin).
5. Пакеты в verdaccio (versions на месте).
6. Пинг тестера со списком версий + целью (URL скомпилированной доки).
## 3. Ретейст-рецепт (r10, переиспользуем)
- Стенд: `/tmp/sched-alerts-stand/` (Windows Temp), node_modules `@sched/core` /
`@sched/daemon` из verdaccio, `.npmrc``@sched:registry=https://verdaccio.kzntsv.site/`.
Приёмник `receiver.mjs` (порты 8131/8132).
- Лестница r10: a) регресс дефолта, b) `on:[]` = тишина (массивы REPLACE), c) per-task on,
d) per-task onMissed (missed-slot: гашение демона на слот > grace 120s), e) мультиканал
(+ без корневого webhook), f) fail-fast на load (все 3 варианта).
- ⚠️ Гоча путей: write-тул пишет `/tmp/...` как `C:\tmp\...` (диск-рут), bash `/tmp` =
Windows Temp. Синхронизировать через `cp`.
- Крон `* * * * *` — слот на :00 каждой минуты; запускать демон и ждать следующего :00+8s.
## 4. Результат r10
6/6 PASS, 0 находок, 0 замечаний — первый раунд без фиксов после режекта. Бонус: HMAC
`X-Sched-Signature-256` MATCH. Финальные версии: core 0.44.0 / daemon 0.4.2.

View File

@@ -26,6 +26,7 @@ Catalog of all wiki pages. One line per page, organized by type. Updated on ever
- [nvm-junction-ismain-gate-gotcha](concepts/nvm-junction-ismain-gate-gotcha.md) — ESM isMain-гейт молча не выполняется под junction'нутым npm-рутом (nvm/mise/volta); realpath-фикс; диагностика за 30 сек
- [nvm-windows-node-switch](concepts/nvm-windows-node-switch.md) — смена версии Node на nvm-windows: junction, per-version глобалы, PATH-кэш, npm 11 allow-scripts; Node 22→24 evidence
- [sched-fnf-r8-verification-stand](concepts/sched-fnf-r8-verification-stand.md) — стенд верификации F&F r8 (schedule-as-entity): путь, версии core 0.40.2/ui 0.2.0, карта репро-скриптов (миграции/движок/политики/API 52/UI 13), подтверждённый контракт (ceiling, retryCount, snapshot, pause AND, tz-hoist, PATCH-merge), находки №5 (U1 форма-tz, U2 вёрстка), как закрыть раунд
- [sched-fnf-testing-method](concepts/sched-fnf-testing-method.md) — метод F&F-тестирования (урок r10): тест по СКОМПИЛИРОВАННОЙ доке (dev-сервер localhost:5108), не по сырцам; порядок хендоффа 16 (код → доки source парсящиеся → generate/dist → push ноль ahead → verdaccio → пинг), битый пример = возврат, schedjs.com = заглушка (деплой не требовать)
- [windows-docker-test-harness-gotchas](concepts/windows-docker-test-harness-gotchas.md) — грабли Windows-верификации против docker: rmSync до DatabaseSync (EBUSY), vitest 10s vs ~11s docker-DDL, монотонность фейк-часов, изоляция DB на сценарий, висельники node-процессов
- [snolla-smtp-mail-delivery-2026-08](concepts/snolla-smtp-mail-delivery-2026-08.md) — SMTP-инцидент 1214.08: 525 (Яндекс отключил протоколы) → 554 (холодный ящик, мульти-получатели) → 550 (from not owned); фиксы + монитор на VDS + рецепт деплоя
- [keenetic-rci-api](concepts/keenetic-rci-api.md) — KeeneticOS RCI API: auth, чтение конфига, запись через CLI-parser, DNS-override против сломанного hairpin

View File

@@ -1,3 +1,4 @@
## [2026-08-19] ingest | NEW concepts/sched-fnf-testing-method.md — метод F&F-тестирования (урок r10): тест по скомпилированной доке (dev-сервер localhost:5108), порядок хендоффа 16, битый пример = возврат, schedjs.com заглушка. index.md updated (+1).
## [2026-08-16] ingest | concepts/pilonuxt-restart-vs-redeploy-2026-08-16.md — день деплоев стека 16 (7 операций): рестарт vs пересборка разведены как отдельные операции. Рестарт сбрасывает in-memory viewModel кэш content-api (цена за м³ подтянулась после рестарта без пересборки); пересборка — только для кода. Анти-симптом: 500 на категориях с логом `@snolla/core viewModels/index.js:419 _.find(x=>x.name)` = код/данные (Content object vs array, admin-api create), рестарт не лечит — фикс snolla core 0.26.7 + admin-api 0.11.0 array-canon (1128ddc → 64c2539). Откат-цепочка образов 64c2539→…→8b7e8c4. +index.md. Монорепа-сторона заингестена прогером (lazy-data-not-found-404, admin-api-content-wire array-canon, cms-edits-cache-restart, v-html-on-component-ssr, admin-api-content-edit).
## [2026-08-14] decision | FormSubmissions.Content ₽→«?» — координация закрыта. ALTER на клиентской stostayer сделан (.admin); snolla опубликовала `@snolla/data@0.15.1` (STRING→TEXT=NVARCHAR(MAX), тесты 7/7); скан живых БД VDS: MoreThenCms+Staging уже nvarchar (ALTER не нужен), VDS-stostayer varchar — не прод, не трогаем (роль — к оператору); legacy stostayer.web на @snollajs 0.7.x — фикс не едет, ALTER покрывает (backport опция `065bb44`); формы есть у всех сайтов тиража (pilorama98 2516/labtools 916 — вопреки гипотезе snolla). Бонус: email-контракт задокументирован snolla (forms-email-contract.md), warn при пустом `to` — ждёт решения vitya. Таска snolla [formsubmissions-content-nvarchar] закрыта.
## [2026-08-14] implement | MSSQL stayer_site: ALTER FormSubmissions.Content varchar(max) cp1251 → NVARCHAR(MAX) (запрос их прогера: ₽→«?» в письмах с калькулятора). Verify до/после (nvarchar max). Live-тест не гонял, тестовые заявки #68485/#68486 не удалял (ждут подтверждения). Соединение: tedious из packages/web node_modules, MSSQL 91.222.236.225:1433 открыт снаружи.