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

265 lines
25 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Рекомендации еженедельного анализа 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/` и остальные файлы журнала не тронуты. Коммит не выполнялся
(отдельный этап конвейера).