DB.FlowExp_WorkStatistics/llm-artifacts/02-analysis.md

296 lines
31 KiB
Markdown
Raw 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-06
Исполнитель: этап «analyst» конвейера (авто). Источники: `_summary.md`
(перегенерирован этим прогоном `flow_stats.py --write-summary`), карточка
`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), `recommendations/2026-11-05-рекомендации.md` (прошлый анализ —
сверка прогресса R1–R9). Период: 2026-11-05 → 2026-11-06; клон журнала —
этап 01-clone, ветка main, HEAD `abafea3` (единственная запись reflog — сам
клон: с прошлого анализа в журнал ничего не коммитилось и не приезжало).
**Артефакты, записанные в журнал этим прогоном:**
`recommendations/2026-11-06-рекомендации.md` (этот документ),
`_recommendations.md` (перезаписан: TOP-таблица), `_summary.md`
(перегенерирован скриптом). Карточки `runs/` и остальные файлы журнала не
изменялись. Коммит не выполнялся — отдельный этап конвейера.
## Состояние на дату
- **Карточек в петле: 1 — новых за период нет.** Единственная карточка
`dwfrun-10fa0e8f` (05.11 18:43, kind **документ**, form **preset**, preset
kit-dev-process, agents 4, revisions 0, escalations 10, result **fail**,
duration «-») остаётся и первой, и последней: прогонов разработки через
петлю ещё не было, срез `--kind этап-модуля` — **0 карточек**. Петле сутки;
она ещё не собрала ни одного замера класса, ради которого создавалась.
- `flow_stats.py` отработал по трём выборкам без ошибок (EXIT=0), вывод
повторяет прошлый замер: все проекты → «Карточек: 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:114). Петлевые факты
светофор не переключают — замер делается отчётом замыкания итерации
проекта, не анализом петли.
- **Ни одна из R1–R9 прошлого анализа не исполнена** — перепроверено построчно
06.11: `project`/`step` карточки — по-прежнему пути (карточка:3–4);
NUM_FIELDS парсера без findings/redo/tokens (flow_stats.py:23); словарь kind
в README — латинское `db` (README:32) при «БД» в SKILL.md (baseline §1);
ссылка dx-flow.md:8 `../../readme.md` ведёт вне репозитория. Это ожидаемо:
исполнение висит на решениях владельца Р-1..Р-8 (карточка, «Уроки») и
отдельных задачах внедрения P1–P6.
- **Окно решения Р-1 ещё открыто для класса этап-модуля** (0 карточек —
миграции формата пока не потребовалась бы ни для одной), но уже закрыто для
класса документ: единственная карточка записана старым форматом. Цена
промедления растёт с каждой новой карточкой: утверждить P4+P5 (формат
карточки, словарь kind, --verify-last) — самое дешёвое по цене момента
действие недели.
- Новый механический факт периода: **многострочные уроки теряют хвост при
агрегации** — см. R9(4).
## Сверка с целями dx-flow
### Метрики хуже цели — кандидаты в рекомендации (правило светофора)
| Метрика | Цель | Последний факт | Светофор | Изменение за период 05→06.11 |
|---|---|---|---|---|
| А1 находки ревизии/этап, high | медиана ≤2, high=0 | медиана 2/этап (И3–И6), И3-э1: **2 high** | 🟡 | новых замеров нет; неизмеримость пресетной веткой переподтверждена: единственная карточка — revisions 0, поля findings нет (R2/R5) |
| А2 псевдо-якоря | 0 | И3-э1: **2** | 🟡 | новых замеров нет; приём «пересчёт/живой запрос» в таблице приёмов dx-flow так и не дописан (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) |
### Метрики в цели (🟢), которые карточка петли не измеряет
| Метрика | Цель/тренд | Факт (переподтверждён 06.11) |
|---|---|---|
| Б3 wall-clock и токены | тренд ↓ на однотипных | duration_min «-» («пресетом не фиксируется», карточка:13), поля токенов нет (R2) |
| Г2 эскалации | закрытие ≤1 дня | счётчик есть (10), время закрытия и разбивка по темам в карточку не попадают — прямой урок карточки (R2) |
Правило отбора соблюдено: в TOP — все 🟡-кандидаты (кроме названных
исключений) плюс впервые доказанная неизмеримость 🟢-метрик и механические
дефекты журнала. R1–R9 сохраняют номера и ранги прошлого анализа: фактуры
периода (0 новых карточек, 0 новых замеров) для переранжирования нет; к
каждой добавлен статус исполнения и перепроверка.
## TOP-рекомендации
### R1. Формат полей карточки — по README, а не пути и прочерки
**Тип:** механическая (имена/значения полей карточки, имя файла) · **Приоритет:** 1 · **Статус против 2026-11-05:** не исполнено — перепроверено 06.11.
- **Доказательство:** карточка:3–4 — `project` и `step` содержат полный путь
`I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow`; формат
README:25,30–31 задаёт короткие идентификаторы (`project: kit-rag`,
`step: 7.4 этап 2`) и имя файла `<дата>-<проект>-<шаг>-<hash>` — в имени
фактической карточки части `<шаг>` нет; `duration_min: "-"` (карточка:13) —
конвенция «не зафиксировано» нигде не определена. Следствие уже в
`_summary.md` этого прогона: «проектов: 1», где «проект» — путь, а уроки
печатаются с путём дважды — «(I:/Kit/…, I:/Kit/…, preset)» (_summary.md:12).
Каждая новая папка задачи станет «новым проектом» — группировка по project
фрагментируется.
- **Действие:** в README зафиксировать: `project` — короткое имя проекта
(словарь: kit-rag, kit-dev-ai, kit-zcode-plagins…), `step` — короткий
идентификатор шага, незафиксированное значение — пустое или `-`, имя файла
— со всеми четырьмя частями; требование продублировать в генерацию карточки
(SKILL.md §3.3/§5.2). Входит в пакет решения владельца Р-1 (P4+P5).
- **Как проверить:** следующая карточка — короткие `project`/`step`, `<шаг>`
в имени файла; две карточки одного проекта дают в `_summary.md` «проектов:
1», а не 2.
### R2. Поля карточки для А1/Б2/Б3/Г2: findings, findings_high, redo, tokens
**Тип:** механическая (имена полей карточки) · **Приоритет:** 2 · **Статус:** не исполнено — whitelist парсера без изменений (flow_stats.py:23–25, проверено 06.11).
- **Доказательство:** единственная карточка: revisions 0 при kind=документ
(«у пресета нет циклов ревизии», карточка:10), тогда как А1 — находки
ревизии (findings[] отчёта рана): поле `revisions` численно не определено,
коллизия А1/Б2 (baseline §5); duration_min «-» и токенов нет — Б3
неизмерима; урок карточки прямо требует: «разбивка по темам каждой
эскалации в материал прогона не попадает — учесть при доработке формата
карточки/отчёта рана» (10 эскалаций при 4 агентах). Парсер распознаёт
только STR_FIELDS/NUM_FIELDS — новые поля молча теряются.
- **Действие:** расширить шапку карточки полями `findings` (всего находок
ревизии), `findings_high`, `redo` (амдменты/resume), `tokens`; определить
`revisions` = «циклы правок по находкам ревизии»; темы эскалаций — полем
`escalation_topics` или кратким списком в «Уроках»; новые числовые поля
добавить в NUM_FIELDS одним коммитом с README/SKILL.md. Входит в пакет Р-1
(P4+P5: amend_runs/review_findings/tokens).
- **Как проверить:** карточка-фикстура с новыми полями проходит парсер без
потерь; в `_summary.md` по kind=этап-модуля появляются средние findings/redo
— сверка с А1/Б2 без ручного сбора; для preset-прогонов Б3 получает числа.
### R3. Атрибуция журнала при прогонах над журналом: baseline HEAD + зоны
**Тип:** семантическая (зоны/areas исполнителей) · **Приоритет:** 3 · **Статус:** не исполнено; сам этот прогон аналитика тоже не зафиксировал baseline HEAD (этап работал в окружении без git-бинарника, клон дан этапом 01-clone) — прецедент повторится, пока правила нет.
- **Доказательство:** урок карточки «Вне-зонная запись в журнал
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` на месте (проверено 06.11); SKILL.md вне журнала, синхронизацию проверять при утверждении Р-1.
- **Доказательство:** README:32 — словарь «документ | требования |
архитектура | db | этап-модуля», пример `kind: db`; SKILL.md:127 (по
baseline §1) — «БД»: расхождение регистра/языка в двух документах плагина.
Фильтр `--kind` требует ТОЧНОГО совпадения (flow_stats.py:93–94) — «БД» и
«db» станут двумя классами, выборки потеряют карточки. Для аналитического
класса отдельного значения/правила нет (см. R6): единственная карточка
использовала «документ».
- **Действие:** зафиксировать канонический словарь из 5 значений (латинское
`db`) в README, дословно синхронизировать SKILL.md; в flow_stats.py —
нормализация kind (trim/lower, синоним «бд»→«db») до сравнения; значение
для аналитического класса согласовать с R6. Входит в пакет Р-1.
- **Как проверить:** тестовая карточка `kind: БД` попадает в выборку
`--kind db`; в отчёте класс один; словари README и SKILL.md совпадают
дословно.
### R5. Каркас пресета — до модального паттерна (ревизия, интегратор, запись карточки)
**Тип:** семантическая (топология/роли/гейты пресета) · **Приоритет:** 5 · **Статус:** не исполнено — единственный preset-прогон в фактуре по-прежнему даёт revisions 0, escalations 10, result fail.
- **Доказательство:** первый и единственный пресетный прогон (до-петлевые 93
— все generated, baseline §2.2): revisions 0 («у пресета нет циклов
ревизии»), escalations 10 при 4 агентах («заметная часть решений ушла в
approvals владельца» — Р-1..Р-8), result fail (карточка:10–12); в пресетах
нет ролей интегратора и независимого ревизора (baseline §2.5), тогда как
сгенерированный модальный паттерн Kit.RAG (зоны → интегратор-гейт → ревизор
свежим контекстом → контрольный гейт, baseline §2.3) совпадает с эталоном
dx-flow «факт-в-факт» (baseline §4). Пресетная ветка не производит ни
ревизий, ни данных для А1 — и именно она пока единственная пишет карточки.
- **Действие:** привести `kit-dev-process.dwf.ts`/`kit-dev-tdd.dwf.ts` к
модальному паттерну: исполнители по зонам с мандатами → интегратор-гейт →
ревизор свежим контекстом → контрольный гейт → финальная стадия «карточка +
commit»; до выравнивания не форсировать приоритет пресетов из §3.2 SKILL.md.
Входит в решения владельца Р-2/Р-3.
- **Как проверить:** 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 и закрытие находок контрольного гейта правкой
**Тип:** семантическая (гейты/приёмы dx-flow) · **Приоритет:** 7 · **Статус:** не исполнено — таблица приёмов dx-flow:37–49 по-прежнему без строки про пересчёт чисел/живые запросы якорей.
- **Доказательство:** А2 = 2 (И3-э1, 🟡), триггер метрики требует «приём в
dx-flow + формулировка dx-dev-8»; в цикле этапа пересчёт упомянут
(dx-flow:16–18), но отдельного приёма в таблице приёмов нет. Петлевые
прецеденты того же корня (утверждения без пересчёта): аудит §2.2 приписал
руну «grep ≥1 строка» по всем 4 маркерам пресета, независимое
воспроизведение — 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 (строки
76–79): правило соблюдается, а метрика хуже цели ⇒ на следующей
ретроспективе пересматривается оценка правила/приёма. В4 — возраст
docChanges до 4 этапов при цели ≤1 итерации ⇒ триггер «выносить легализацию
чаще».
- **Действие:** в ближайшей ретроспективе проекта: каскад статусов — строго
одно место (readme модуля) + ссылки; легализация docChanges — на каждом
замыкании этапа.
- **Как проверить:** замер git log следующей итерации — доля док-коммитов
≤50 % (цель ≤40 % к следующей); возраст старейшей записи docChanges на
легализации ≤1 итерации; строка «итерация | метрика | значение | светофор |
триггер | действие» в отчёте замыкания.
### R9. Механика журнала: ссылка, пустая таблица, «#» в значениях, обрезка многострочных уроков
**Тип:** механическая (ссылки, вывод отчёта, парсер) · **Приоритет:** 9 · **Статус:** не исполнено — все три дефекта прошлого анализа перепроверены 06.11 и на месте; расширен новым фактом этого прогона (п. 4).
- **Доказательство:** (1) dx-flow.md:8 — ссылка `[readme.md](../../readme.md)`
из корня журнала ведёт вне репозитория (оригинал карточки — std1-ext
Kit.DevAi); (2) `render()` при 0 карточек печатает пустую таблицу «| форма |
прогонов | success |» без строк — наблюдено сегодня в выборке `--kind
этап-модуля`; (3) парсер обрезает значение по «#» (flow_stats.py:60
`val.split(" #")[0]`) — значение с решёткой внутри потеряет хвост,
ограничение в README не описано; (4) **новое:** многострочные уроки теряют
хвост — парсер собирает только строки, начинающиеся с «- »
(flow_stats.py:73–74), продолжения пункта отбрасываются: в `_summary.md`
этого прогона урок «Вне-зонная запись…» обрывается на «: 2» (_summary.md:12)
— потеряны «2 локальных коммита 18:16:09 (075f063) и 18:16:45 (e6c9559)…»;
урок «Дефект точности…» обрывается на «:» (_summary.md:13). Самые
содержательные части уроков в агрегат не попадают.
- **Действие:** заменить ссылку явным указанием источника («эталон:
Kit.DevAi/std1-ext/_rules/dx/dx-flow.md»); не печатать таблицу без строк;
склеивать строки одного пункта «Уроков» до следующего «- »/заголовка; в
README (формат карточки) — запрет «#» в значениях шапки, кроме явного
комментария через пробел.
- **Как проверить:** выборка с 0 карточек — без пустой таблицы; в
`_summary.md` урок читается целиком (до конца пункта); ссылка ведёт в
осмысленное место либо заменена путём; значение без «#» читается парсером
целиком.
## Не вошло в 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»** — условия
окружения конкретной задачи, дефектом процесса не являются.
- **Переранжирование R1–R9** — фактуры периода нет (0 новых карточек, 0
новых замеров); номера сохранены для трассируемости с анализом
2026-11-05.
## Что сделано этим прогоном аналитика
- Запущен `flow_stats.py` трижды (все проекты + `--write-summary`; kind
«этап-модуля»; kind «документ») — EXIT=0, выводы идентичны прошлому замеру;
`_summary.md` перегенерирован.
- Прочитаны README.md, dx-flow.md, единственная карточка `runs/` (полностью,
включая «Уроки»), baseline, прошлые рекомендации и `_summary.md`; сверка
прогресса: R1–R9 не исполнены, механические дефекты перепроверены
построчно, зафиксирован один новый факт — обрезка многострочных уроков в
агрегате.
- Записаны: этот файл и `_recommendations.md` (перезаписан). Карточки
`runs/` и остальные файлы журнала не тронуты. Коммит не выполнялся —
отдельный этап конвейера (этап аналитика работал в окружении без
git-бинарника; клон ветки main подготовлен этапом 01-clone).