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