DB.FlowExp_WorkStatistics/recommendations/2026-11-05-рекомендации.md

25 KiB
Raw Permalink Blame History

Рекомендации еженедельного анализа kit-dev-flow — 2026-11-05

Исполнитель: этап «analyst» конвейера (авто). Источники: _summary.md (flow_stats.py, перегенерирован этим прогоном), карточка runs/2026/2026-11-05-анализ-kit-dev-flow-10fa0e8f.md (первая карточка петли, разделы «Уроки»), baseline/2026-11-05-до-петли.md (93 до-петлевых прогона в 3 проектах, 23.10–04.11), dx-flow.md (эталон: 14 метрик А1–Г3, цели/триггеры, светофор от 2026-11-02). Это обновление анализа того же дня (18:43): с того замера в петле появилась первая карточка — она учтена, ранжирование пересмотрено.

Артефакты, записанные в журнал: recommendations/2026-11-05-рекомендации.md (этот документ), _recommendations.md (перезаписан: TOP-таблица), _summary.md (перегенерирован flow_stats.py --write-summary). Карточки runs/ и остальные файлы журнала не изменялись. Коммит не выполнялся — отдельный этап конвейера.

Состояние на дату

  • Карточек в петле: 1 (на замере 18:43 того же дня — 0). Прогресс против прошлой R1 («закрепить запись карточки механизмом»): карточка записана прогоном автоматически — механизм агента сессии сработал хотя бы раз. Остаток прошлой R1 перешёл в новые R1/R2 (качество полей) и R5 (запись как стадия пресета).
  • Карточка dwfrun-10fa0e8f: kind документ, form preset — первый пресетный прогон в накопленной фактуре (до-петлевые 93 — все generated, baseline §2.2); preset kit-dev-process, model GLM-5.3-Flash, agents 4, revisions 0 («у пресета нет циклов ревизии»), escalations 10, result fail, duration_min «-» («пресетом не фиксируется»).
  • flow_stats.py отработал по трём выборкам без ошибок (EXIT=0): все проекты + --write-summary → «Карточек: 1 (проектов: 1)», форма preset 1 / success 0 %, средние: агентов 4.0, ревизий 0.0, эскалаций 10.0, длительность —; --kind этап-модуля → «Карточек: 0» (таблица форм печатается пустой шапкой); --kind документ → та же карточка.
  • Новых замеров А1–Г3 нет: светофор остаётся от 2026-11-02 (А1–А4, Б1, Б2, В2, В4 — 🟡; Б3, В1, В3, Г1–Г3 — 🟢). Петлевые факты светофор не переключают (замер — отчётом замыкания итерации проекта), но впервые показали измеримость метрик карточкой — см. сверку.

Сверка с целями dx-flow

Метрики хуже цели — кандидаты в рекомендации (правило светофора)

Метрика Цель Последний факт Светофор Что нового за неделю
А1 находки ревизии/этап, high медиана ≤2, high=0 медиана 2/этап (И3–И6), но И3-э1: 2 high 🟡 петля: revisions: 0 — пресет ревизий не содержит ⇒ А1 пресетной веткой не измеряется вовсе (R2/R5)
А2 псевдо-якоря 0 И3-э1: 2 🟡 петлевой факт того же корня (точность без пересчёта): аудит приписал руну «grep ≥1» по 4 маркерам, воспроизведение — 2 маркера ×0 (R7)
А3 дефекты после замыкания 0 И1: этап «доезжал» ×2 🟡 петлевой факт: находка контрольного гейта (LOW) задокументирована, но артефакт не правился — дефект живёт после замыкания (R7)
А4 повторы известных граблей 0 И2: 3; И3: инструменты введены 🟡 новых фактов нет; ждёт данных петли
Б1 доля док-коммитов ≤40 % И1 ~70 %, И2 ~56 % — две итерации подряд >50 % 🟡 без изменений; триггер «упрощать каскад» исполнен не был (R8)
Б2 redo-прогоны/этап ≤1 И1 4, И2 2; И3/И4 0 🟡 поле redo в карточке отсутствует — петля метрику не собирает (R2)
В2 темы с первого захода ≥75 % 2/4 = 50 % 🟡 без изменений; контур RAG-корпуса, не петля
В4 возраст docChanges ≤1 итерации до 4 этапов 🟡 без изменений; триггер «выносить легализацию чаще» (R8)

Метрики в цели (🟢), которые карточка петли не измеряет (новое)

Метрика Цель/тренг Что показала первая карточка
Б3 wall-clock и токены тренд ↓ на однотипных duration_min: «-» («пресетом не фиксируется»), поля токенов нет — Б3 по петле не собирается (R2)
Г2 эскалации закрытие ≤1 дня счётчик есть (10), но время закрытия и разбивка по темам в карточку не попадают — прямой урок карточки (R2)

Правило отбора соблюдено: в TOP вошли все 🟡-кандидаты (кроме названных исключений) плюс впервые доказанная неизмеримость 🟢-метрик и механические дефекты журнала.

TOP-рекомендации

R1. Формат полей карточки — по README, а не пути и прочерки

Тип: механическая (имена/значения полей карточки, имя файла) · Приоритет: 1.

  • Доказательство: первая карточка — project и step содержат полный путь I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow (карточка, строки 3–4), тогда как формат README задаёт короткие идентификаторы: project: kit-rag, step: 7.4 этап 2 (README:30–31); имя файла 2026-11-05-анализ-kit-dev-flow-10fa0e8f.md без части <шаг> (формат README:25 — <дата>-<проект>-<шаг>-<hash>); duration_min: "-" — конвенция «не зафиксировано» нигде не определена. Следствие уже в _summary.md: «проектов: 1», где проект — путь; каждая новая папка задачи станет «новым проектом» — группировка по project фрагментируется.
  • Действие: в README зафиксировать: project — короткое имя проекта (словарь: kit-rag, kit-dev-ai, kit-zcode-plagins…), step — короткий идентификатор шага; незафиксированное значение — пустое или -; имя файла — со всеми четырьмя частями. Требование продублировать в генерацию карточки (SKILL.md §3.3/§5.2); фиксацию длительности пресетом — в R5.
  • Как проверить: следующая карточка: короткие project/step, <шаг> в имени файла; две карточки одного проекта дают в _summary.md «проектов: 1», а не 2.

R2. Поля карточки для А1/Б2/Б3/Г2: findings, findings_high, redo, tokens

Тип: механическая (имена полей карточки) · Приоритет: 2.

  • Доказательство: карточка: revisions 0 при kind=документ — «у пресета нет циклов ревизии», а А1 — это находки ревизии (findings[] отчёта рана): поле revisions численно не определено, коллизия А1/Б2 (baseline §5); duration_min «-» и токенов нет — Б3 неизмерима; урок карточки прямо требует: «разбивка по темам каждой эскалации в материал прогона не попадает — учесть при доработке формата карточки/отчёта рана». Парсер распознаёт только whitelist STR_FIELDS/NUM_FIELDS (flow_stats.py:23–25) — новые поля молча теряются.
  • Действие: расширить шапку карточки полями findings (всего находок ревизии), findings_high, redo (амдменты/resume), tokens; определить revisions = «циклы правок по находкам ревизии»; темы эскалаций — кратким списком в «Уроках» или полем escalation_topics; новые числовые поля добавить в NUM_FIELDS парсера одним коммитом с README/SKILL.md.
  • Как проверить: карточка-фикстура с новыми полями проходит парсер без потерь; в _summary.md по kind=этап-модуля появляются средние findings/redo — сверка с целями А1/Б2 без ручного сбора; для preset-прогонов Б3 получает числа.

R3. Атрибуция журнала при прогонах над журналом: baseline HEAD + зоны

Тип: семантическая (зоны/areas исполнителей) · Приоритет: 3.

  • Доказательство: урок карточки «Вне-зонная запись в журнал DB.FlowExp_WorkStatistics в окне прогона»: 2 локальных коммита 18:16:09 (075f063) и 18:16:45 (e6c9559) + файлы baseline/, scripts/, dx-flow.md — журнал не входит в areas ни одного из 4 исполнителей; контролёр заявил «коммитов не делал» (проверка_контрольная.md §2.1/K1); атрибуция невозможна, классифицировано «параллельная активность, задаче не приписывать», решение владельца Р-8. Предписание урока: «до старта фиксировать baseline HEAD журнала и/или явно включать его в areas, чтобы атрибуция была формальной».
  • Действие: правило в dx-flow/SKILL.md: прогон, работающий над журналом опыта или иным общим репозиторием, фиксирует в карточке базовую ревизию (поле journal_base) либо включает журнал в areas назначенного исполнителя; изменения между base и HEAD вне зон — задаче не приписываются.
  • Как проверить: в следующей карточке прогона над журналом есть базовая ревизия; diff base..HEAD объясним зонами; находки класса K1 («коммиты неизвестного происхождения») не воспроизводятся.

R4. Словарь kind: один канон в README и SKILL.md

Тип: механическая (словарь kind) · Приоритет: 4.

  • Доказательство: README:32 — словарь «документ | требования | архитектура | db | этап-модуля», пример kind: db; SKILL.md (строка 127 по baseline §1) — «БД»: расхождение регистра/языка в двух документах плагина. Фильтр --kind требует ТОЧНОГО совпадения (flow_stats.py:93) — «БД» и «db» станут двумя классами, выборки потеряют карточки. Первая карточка использовала «документ» (по README) для аналитической задачи — отдельного значения/правила для этого класса нет (см. R6).
  • Действие: зафиксировать канонический словарь из 5 значений (латинское db) в README, дословно синхронизировать SKILL.md; в flow_stats.py — нормализация kind (trim/lower, синоним «бд»→«db») до сравнения; значение для аналитического класса согласовать с R6.
  • Как проверить: тестовая карточка kind: БД попадает в выборку --kind db; в отчёте класс один; словари README и SKILL.md совпадают дословно.

R5. Каркас пресета — до модального паттерна (ревизия, интегратор, запись карточки)

Тип: семантическая (топология/роли/гейты пресета) · Приоритет: 5.

  • Доказательство: первый пресетный прогон в фактуре: revisions 0 («у пресета нет циклов ревизии»), escalations 10 при 4 агентах («заметная часть решений ушла в approvals владельца» — Р-1..Р-8), result fail; в пресетах нет ролей интегратора и независимого ревизора (baseline §2.5), тогда как сгенерированный модальный паттерн Kit.RAG (зоны → интегратор-гейт → ревизор свежим контекстом → контрольный гейт, baseline §2.3) совпадает с эталоном dx-flow «факт-в-факт» (baseline §4). Пресетная ветка не производит ни ревизий, ни данных для А1.
  • Действие: привести kit-dev-process.dwf.ts/kit-dev-tdd.dwf.ts к модальному паттерну: исполнители по зонам с мандатами → интегратор-гейт → ревизор свежим контекстом → контрольный гейт → финальная стадия «карточка
    • commit» (закрывает и остаток прошлой R1); до выравнивания не форсировать приоритет пресетов из §3.2 SKILL.md.
  • Как проверить: grep ролей интегратора/ревизора в тексте пресета; следующий пресетный прогон даёт карточку с findings и осмысленным revisions, эскалации без разбухания approvals; в _summary.md таблица «форма» наполняется обеими ветками.

R6. Правило для аналитических/исследовательских задач (sd-анализ)

Тип: семантическая (роли/гейты класса задач) · Приоритет: 6.

  • Доказательство: урок карточки «Нет файла правил для аналитических/исследовательских задач (ТЗ → отчёт → предложения)»: этапы аудита и контрольной проверки строились по общему каркасу без норматива; правила тестов c-tst/db-tst/d-tst неприменимы (задача не меняет код/БД/DAL, правки плагина запрещены ТЗ); процессные шаги 1–7 process.md не применялись. Урок прямо предписывает: «при повторении класса задач стоит завести правило (например, sd-анализ)».
  • Действие: завести правило класса: каркас «ТЗ → аудит/верификация по ТЗ → доработка → независимая контрольная проверка → сдача владельцу»; гейты класса — воспроизведение фактов и сверка с ТЗ вместо тестов; утверждение через ретроспективу (std1-ext).
  • Как проверить: следующая аналитическая задача строит план по правилу (ссылка в плане рана); контрольная проверка класса идёт по формализованному чек-листу, а не «по общему каркасу».

R7. Исполнить триггер А2 и закрытие находок контрольного гейта правкой

Тип: семантическая · Приоритет: 7.

  • Доказательство: А2 = 2 (И3-э1, 🟡), триггер требует «приём в dx-flow + формулировка dx-dev-8» — отдельного приёма в таблице приёмов dx-flow нет. Новый петлевой факт того же корня (утверждения без пересчёта): аудит §2.2 приписал руну «grep ≥1 строка» по всем 4 маркерам пресета, независимое воспроизведение (§2.3) — 2 маркера ×0; и связанный факт класса А3: «аудит после себя не правил никто — расхождение живёт в артефакте (LOW)» — находка контрольного гейта задокументирована, но не закрыта правкой.
  • Действие: ретроспективой (владелец в контуре утверждения) дописать в dx-flow приём «якоря перепроверяются живым запросом (dx-dev-8), числа — независимым пересчётом» с числом-прецедентом; дополнить цикл этапа (шаг «ПРАВКИ»): находки контрольного гейта закрываются правкой артефакта, а не только документированием.
  • Как проверить: приём с прецедентом-числом появился в dx-flow; на следующем прогоне класса А2 = 0, за контрольным гейтом — diff правки артефакта, а не только запись о находке.

R8. Исполнить сработавшие триггеры Б1 и В4 (ретроспективой проекта)

Тип: семантическая · Приоритет: 8.

  • Доказательство (без изменений с прошлого анализа): Б1 — И1 ~70 %, И2 ~56 %: две итерации подряд >50 % при цели ≤40 % ⇒ триггер «упрощать каскад» уже сработал, метрика 🟡; по правилу карточки dx-flow: правило соблюдается, а метрика хуже цели ⇒ на следующей ретроспективе пересматривается оценка правила/приёма. В4 — возраст docChanges до 4 этапов при цели ≤1 итерации ⇒ триггер «выносить легализацию чаще».
  • Действие: в ближайшей ретроспективе проекта: каскад статусов — строго одно место (readme модуля) + ссылки; легализация docChanges — на каждом замыкании этапа.
  • Как проверить: замер git log следующей итерации — доля док-коммитов ≤50 % (цель ≤40 % к следующей); возраст старейшей записи docChanges на легализации ≤1 итерации; строка «итерация | метрика | значение | светофор | триггер | действие» в отчёте замыкания.

R9. Механика журнала: ссылка, пустая таблица, «#» в значениях

Тип: механическая · Приоритет: 9.

  • Доказательство: dx-flow.md:8 — ссылка [readme.md](../../readme.md) из корня журнала ведёт вне репозитория (оригинал карточки лежит в std1-ext Kit.DevAi); render() при 0 карточек печатает пустую таблицу «| форма | прогонов | success |» без строк — наблюдено в этом прогоне в выборке --kind этап-модуля; парсер обрезает значение по «#» (flow_stats.py:60 val.split(" #")[0]) — значение с решёткой потеряет хвост, ограничение в README не описано (карточка использует «#»-комментарии и читается корректно — риск только для «#» внутри значения).
  • Действие: заменить ссылку явным указанием источника («эталон: Kit.DevAi/std1-ext/_rules/dx/dx-flow.md»); не печатать таблицу без строк; в README (формат карточки) — запрет «#» в значениях шапки, кроме явного комментария через пробел.
  • Как проверить: ссылка из журнала ведёт в осмысленное место либо заменена путём; выборка с 0 карточек без пустой таблицы; карточка со значением без «#» читается парсером целиком.

Не вошло в TOP (осознанно)

  • В2 темы с первого захода 50 % < 75 % — контур RAG-корпуса, не петля; триггер (тюнинг запросов, --tag env:*) уже в «Открытых хвостах» dx-flow.
  • А4, Б2 — свежих фактов нет (А4: И2 3 повтора, инструменты введены в И3; Б2: поле пока не собирается — R2); пересчёт после наполнения петли.
  • Г1, Г3, В1, В3 — в цели, 🟢, действий не требуют.
  • «Папка задачи вне git», «нет start.md/module_reqs.md» — условия окружения конкретной задачи, дефектом процесса не являются.

Что сделано этим прогоном аналитика

  • Запущен flow_stats.py трижды (все проекты + --write-summary; kind «этап-модуля»; kind «документ») — без ошибок; _summary.md перегенерирован (теперь 1 карточка).
  • Прочитаны README.md, dx-flow.md, единственная карточка runs/2026/2026-11-05-анализ-kit-dev-flow-10fa0e8f.md (полностью, включая разделы «Уроки»), baseline (до-петлевая фактура), прошлые рекомендации — сверка прогресса: прошлая R1 частично закрыта появлением первой карточки.
  • Записаны: этот файл и _recommendations.md (перезаписан). Карточки runs/ и остальные файлы журнала не тронуты. Коммит не выполнялся (отдельный этап конвейера).