From abafea3066511b11bc074a366b1b513a9af161a8 Mon Sep 17 00:00:00 2001 From: dev-runner Date: Thu, 5 Nov 2026 17:06:56 +0000 Subject: [PATCH] =?UTF-8?q?analysis:=20=D0=B5=D0=B6=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B8=20kit-dev-flow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _recommendations.md | 32 +- _summary.md | 16 +- llm-artifacts/02-analysis.md | 371 +++++++++++++-------- recommendations/2026-11-05-рекомендации.md | 363 ++++++++++++-------- 4 files changed, 487 insertions(+), 295 deletions(-) diff --git a/_recommendations.md b/_recommendations.md index f70af9b..7acb049 100644 --- a/_recommendations.md +++ b/_recommendations.md @@ -3,21 +3,29 @@ Полная версия с таблицей сверки метрик А1–Г3 и источниками: [recommendations/2026-11-05-рекомендации.md](recommendations/2026-11-05-рекомендации.md) -Контекст недели: карточек в петле 0 (flow_stats.py по трём выборкам); -анализ по baseline (93 до-петлевых прогона, 3 проекта, все generated). +Контекст недели: карточек в петле 1 — первая (kind документ, form preset, +result fail, revisions 0, escalations 10, duration «-»); срез `--kind +этап-модуля` — 0. До-петлевая фактура — baseline (93 прогона, 3 проекта, +все generated). Новых замеров А1–Г3 нет (светофор 2026-11-02: А1–А4, Б1, +Б2, В2, В4 🟡; Б3, В1, В3, Г1–Г3 🟢), но первая карточка показала: +А1/Б2/Б3/Г2 карточкой пока не измеряются, а качество полей отклонилось от +README (пути вместо имён проекта/шага). ## TOP-рекомендации | # | Рекомендация | Тип | Доказательство (кратко) | Как проверить | |---|---|---|---|---| -| R1 | Закрепить запись карточки механизмом (хук/финальная стадия workflow), не памятью агента — петля пуста и не собирает данные | семантическая | карточек 0; авто-записи нет ни в одном из 93 скриптов (grep «flow_exp» — 0); прецедент хука PostToolUse есть в sys-qa-interactive | следующий прогон → карточка в runs/, flow_stats «Карточек: ≥1»; через 2 недели снова 0 ⇒ эскалация владельцу | -| R2 | Канонизировать словарь kind: README «db» vs SKILL.md «БД» при точном фильтре --kind делит классы и теряет карточки | механическая | README: `kind: db`; SKILL.md:127 — «БД»; flow_stats.py:93 — строгое равенство | карточка `kind: БД` попадает в выборку `--kind db`; в отчёте один класс db | -| R3 | Расширить поля карточки: findings, findings_high, redo, tokens; определить revisions; внести в whitelist парсера | механическая | А1 (находки 53→2) не попадает в карточку, хотя findings[] есть в каждом ране; Б3 без токенов; revisions — коллизия А1/Б2 | карточка-фикстура не теряет новые поля; в _summary.md среднее findings по kind=этап-модуля | -| R4 | Доработать пресеты до модального паттерна (зоны → интегратор-гейт → ревизор → контрольный гейт) либо не форсировать их приоритет | семантическая | 0 пресетных из 93 прогонов; в пресетах нет ролей интегратора/ревизора; модальный паттерн = эталон dx-flow «факт-в-факт» | grep ролей в kit-dev-process.dwf.ts; первый пресетный прогон → карточка form: preset; обе ветки в таблице «форма» | -| R5 | Исполнить сработавшие триггеры Б1 (док-коммиты 70→56 % при цели ≤40 %, две итерации >50 %) и В4 (docChanges до 4 этапов): каскад статусов в одно место, легализация на каждом замыкании — через ретроспективу | семантическая | Б1: И1 ~70 %, И2 ~56 % — триггер «упрощать каскад» сработал, метрика 🟡; В4: до 4 этапов при цели ≤1 итерации | замер git log проекта: доля док-коммитов ≤50 % к следующей итерации (цель ≤40 %); возраст docChanges ≤1 итерации | -| R6 | Исполнить триггер А2 (псевдо-якоря = 2 при цели 0): приём «якоря — живым запросом (dx-dev-8), числа — пересчётом» в dx-flow | семантическая | И3-э1: 2 псевдо-якоря, 🟡; в таблице приёмов dx-flow отдельного приёма нет | приём с числом-прецедентом в dx-flow; на следующем этапе А2 = 0 | -| R7 | Починить механику журнала: битая ссылка `../../readme.md` в dx-flow.md:8, пустая таблица форм в _summary.md при 0 карточек, обрезка «#» в значениях шапки (flow_stats.py:60) | механическая | ссылка из корня журнала ведёт вне репозитория; пустая таблица наблюдена в текущем _summary.md; split(" #") режет значения | ссылка ведёт в осмысленное место/заменена путём; отчёт без пустой таблицы; значения читаются целиком | +| R1 | Формат полей карточки по README: `project`/`step` — короткие идентификаторы (не пути), `<шаг>` в имени файла, конвенция «не зафиксировано» | механическая | карточка 10fa0e8f:3–4 — полные пути; README:25,30–31 — `<дата>-<проект>-<шаг>-`, `project: kit-rag`; `_summary.md` уже показывает «проект»-путь | следующая карточка с короткими project/step и `<шаг>` в имени; две карточки одного проекта → «проектов: 1» | +| R2 | Поля `findings`/`findings_high`/`redo`/`tokens` (+ темы эскалаций) в шапку карточки и NUM_FIELDS парсера | механическая | revisions 0 («у пресета нет циклов ревизии») при коллизии А1/Б2; duration «-», токенов нет — Б3 неизмерима; урок карточки: разбивка 10 эскалаций не попадает в формат; whitelist flow_stats.py:23–25 теряет новые поля | фикстура с новыми полями проходит парсер; средние findings/redo в `_summary.md` по kind=этап-модуля — сверка с А1/Б2 | +| R3 | Атрибуция журнала при прогонах над ним: baseline HEAD в карточке и/или журнал в areas исполнителя | семантическая | урок карточки: 2 вне-зонных коммита (075f063, e6c9559) в окне прогона, контролёр «коммитов не делал», решение владельца Р-8 | в карточке прогона над журналом есть базовая ревизия; diff base..HEAD объясним зонами | +| R4 | Канон словаря kind в README и SKILL.md (`db`, не «БД»), нормализация в парсере | механическая | README:32 `db` vs SKILL.md:127 «БД»; flow_stats.py:93 — строгое равенство kind | карточка `kind: БД` попадает в `--kind db`; класс в отчёте один | +| R5 | Каркас пресета — до модального паттерна: интегратор-гейт, ревизор свежим контекстом, контрольный гейт, финальная стадия «карточка+commit» | семантическая | первый preset-прогон: revisions 0, escalations 10 при 4 агентах, result fail; в пресетах нет ролей интегратора/ревизора (baseline §2.5), модальный паттерн Kit.RAG = эталон dx-flow | grep ролей в kit-dev-process.dwf.ts; следующий пресетный прогон — findings в карточке, эскалации без разбухания approvals | +| R6 | Правило класса аналитических задач (sd-анализ): ТЗ → аудит по ТЗ → доработка → независимый контроль → сдача владельцу | семантическая | урок карточки: правила нет, c-tst/db-tst/d-tst неприменимы, этапы шли «по общему каркасу» без норматива | следующая аналитическая задача ссылается на правило; контрольный гейт класса — формализованный чек-лист | +| R7 | Исполнить триггеры А2/А3: приём «якоря — живым запросом (dx-dev-8), числа — пересчётом» в dx-flow; находки контрольного гейта закрываются правкой артефакта | семантическая | А2=2 (И3-э1); петлевой факт: аудит приписал 2 из 4 маркеров (grep ×0), находка LOW не закрыта правкой — дефект живёт после замыкания | приём с числом-прецедентом в dx-flow; следующий прогон: А2=0, за контрольным гейтом — diff правки | +| R8 | Исполнить сработавшие триггеры Б1 (70→56 % при цели ≤40 %, две итерации >50 %) и В4 (docChanges до 4 этапов): каскад статусов в одно место, легализация на каждом замыкании — через ретроспективу | семантическая | Б1: И1 ~70 %, И2 ~56 %, 🟡; В4: до 4 этапов при цели ≤1 итерации; по правилу светофора — пересмотр оценки правила на ретроспективе | замер git log: доля док-коммитов ≤50 % к следующей итерации; возраст docChanges ≤1 итерации | +| R9 | Механика журнала: битая ссылка dx-flow.md:8 (`../../readme.md`), пустая таблица форм при 0 карточек, обрезка «#» в значениях (flow_stats.py:60) | механическая | ссылка из корня журнала ведёт вне репозитория; пустая таблица наблюдена в `--kind этап-модуля` этого прогона; split(" #") режет значения | ссылка заменена явным путём к эталону; отчёт без пустых таблиц; значения шапки читаются целиком | -Правило отбора: метрика хуже цели dx-flow (А1 high, А2, А3, А4, Б1, Б2, -В2, В4 — все 🟡) → кандидат; ранжировано по стоимости для петли. -Метрики в цели (Б3, В1, В3, Г1–Г3 — 🟢) действий не требуют. +Правило отбора: метрика хуже цели dx-flow (А1–А4, Б1, Б2, В2, В4 — все 🟡) +→ кандидат; плюс первые петлевые факты: неизмеримость 🟢-метрик карточкой +(Б3, Г2) и механические дефекты журнала. Ранжировано по стоимости для +петли. В2 (контур RAG) и А4/Б2 (ждут данных петли) в TOP не вошли. diff --git a/_summary.md b/_summary.md index fe270af..66e88e6 100644 --- a/_summary.md +++ b/_summary.md @@ -1,11 +1,19 @@ # Статистика kit-dev-flow — все проекты -Карточек: 0 (проектов: 0) +Карточек: 1 (проектов: 1) | форма | прогонов | success | |---|---|---| +| preset | 1 | 0% | -Средние: агентов —, ревизий —, эскалаций —, длительность — мин. +Средние: агентов 4.0, ревизий 0.0, эскалаций 10.0, длительность — мин. -Провальных/частичных: 0. Уроки из последних: -- (нет провальных карточек в выборке) +Провальных/частичных: 1. Уроки из последних: +- (I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, preset) **Вне-зонная запись в журнал DB.FlowExp_WorkStatistics в окне прогона**: 2 +- (I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, preset) **Дефект точности в артефакте аудита остался неисправленным**: +- (I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, preset) **Итог анализа и предложения улучшений — Пользователь**: утверждение открывает +- (I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, preset) **Факт о внедрении P1.1-пресетной части «кем-то параллельно»** (пресеты 17:35, +- (I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, preset) **Хвосты решений владельца**: Р-1 — утвердить P4+P5 (формат карточки +- (I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, preset) **Escalations: 10 при 4 исполнителях** — заметная часть решений ушла в +- (I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, preset) **Нет файла правил для аналитических/исследовательских задач** (ТЗ → отчёт → +- (I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, I:/Kit/Kit.ZСode.Plagins/tasks/2026-11-05-анализ-kit-dev-flow, preset) **В папке задачи нет start.md и module_reqs.md** — брифом принят diff --git a/llm-artifacts/02-analysis.md b/llm-artifacts/02-analysis.md index 28441e3..13caa3d 100644 --- a/llm-artifacts/02-analysis.md +++ b/llm-artifacts/02-analysis.md @@ -1,181 +1,270 @@ -# Рекомендации еженедельного анализа kit-dev-flow — 2026-11-05 +Everything is done: +- Files written: recommendations/2026-11-05-рекомендации.md, _recommendations.md, _summary.md (by script) +- git status confirms only those 3 files modified, branch main, no commit +- Now return the artifact document verbatim, no surrounding explanations. +# Рекомендации еженедельного анализа kit-dev-flow — 2026-11-05 Исполнитель: этап «analyst» конвейера (авто). Источники: `_summary.md` -(flow_stats.py от 2026-11-05), `baseline/2026-11-05-до-петли.md` (93 -до-петлевых прогона в 3 проектах, 23.10–04.11), `dx-flow.md` (эталон: -14 метрик А1–Г3, цели/триггеры, светофор от 2026-11-02). Карточек в -`runs/` нет — по инструкции анализ по до-петлевым свидетельствам baseline. +(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` -(обновлён скриптом). Коммит не выполнялся — отдельный этап конвейера. +(этот документ), `_recommendations.md` (перезаписан: TOP-таблица), +`_summary.md` (перегенерирован `flow_stats.py --write-summary`). Карточки +`runs/` и остальные файлы журнала не изменялись. Коммит не выполнялся — +отдельный этап конвейера. ## Состояние на дату -- **Прогонов через петлю: 0.** `flow_stats.py` отработал без ошибок (EXIT=0) - по трём выборкам: все проекты (`--write-summary`), `--kind этап-модуля`, - `--kind документ` — везде «Карточек: 0 (проектов: 0)», средние «—». -- До-петлевая фактура (baseline §2): 93 workflow-прогона (Kit.RAG 84, - Kit.DevAi 7, Kit.ZСode.Plagins 2 + 3 dwfeval-прогона), все - **generated** — пресетных 0; 6 амдментов/resume из 93 (6,5 %). -- Новых замеров А1–Г3 нет: светофор остаётся от 2026-11-02 - (А1–А4, Б1, Б2, В2, В4 — 🟡; Б3, В1, В3, Г1–Г3 — 🟢). +- **Карточек в петле: 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 (метрики хуже цели — кандидаты в рекомендации) +## Сверка с целями dx-flow -| Метрика | Цель | Последний факт | Светофор | Триггер dx-flow | +### Метрики хуже цели — кандидаты в рекомендации (правило светофора) + +| Метрика | Цель | Последний факт | Светофор | Что нового за неделю | |---|---|---|---|---| -| А1 находки ревизии, high | high=0 | медиана 2/этап (И3–И6, цель ≤2 достигнута), но И3-э1: **2 high** | 🟡 | high на этапе → усилить B-блок ТЗ и фокус ревизии | -| А2 псевдо-якоря | 0 | И3-э1: **2** | 🟡 | >0 → приём в dx-flow + формулировка dx-dev-8 | -| А3 дефекты после замыкания | 0 | И1: этап «доезжал» **×2** (новее нет) | 🟡 | >0 → ужесточить замыкание (контрольный + хвосты) | -| А4 повторы известных граблей | 0 | И2: **3** (кодировка/лок/байты); И3: инструменты введены, повторов не зафиксировано | 🟡 | 1-й повтор → инструмент; 2-й → эскалация владельцу | -| Б1 доля док-коммитов | ≤40 % | И1 ~70 %, И2 ~56 % — **две итерации подряд >50 %** | 🟡 | >50 % две итерации → упрощать каскад (одно место статусов) | -| Б2 redo-прогоны/этап | ≤1 | И1 4, И2 2 (**хуже цели**); И3/И4 0 — тренд закрыл цель, данных петли нет | 🟡 | >2 → стабильность скриптов (маркер «ТЗ vN») | -| В2 темы с первого захода | ≥75 % | 2/4 = **50 %** | 🟡 | <75 % → тюнинг запросов / ускорить `--tag env:*` | -| В4 возраст docChanges | ≤1 итерации | до **4 этапов** | 🟡 | >1 итерации → выносить легализацию чаще | +| А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) | -Правило светофора соблюдено: каждая строка выше — кандидат; ниже — -TOP по стоимости/срочности. Метрики в цели (Б3 ×3–5, В1 16/16, В3, Г1–Г3) -в рекомендации не входят. +### Метрики в цели (🟢), которые карточка петли не измеряет (новое) + +| Метрика | Цель/тренд | Что показала первая карточка | +|---|---|---| +| Б3 wall-clock и токены | тренд ↓ на однотипных | duration_min: «-» («пресетом не фиксируется»), поля токенов нет — Б3 по петле не собирается (R2) | +| Г2 эскалации | закрытие ≤1 дня | счётчик есть (10), но время закрытия и разбивка по темам в карточку не попадают — прямой урок карточки (R2) | + +Правило отбора соблюдено: в TOP вошли все 🟡-кандидаты (кроме названных +исключений) плюс впервые доказанная неизмеримость 🟢-метрик и механические +дефекты журнала. ## TOP-рекомендации -### R1. Замкнуть петлю: запись карточки не должна держаться на памяти агента -**Тип:** семантическая · **Приоритет:** 1 (блокирует все остальные). +### R1. Формат полей карточки — по README, а не пути и прочерки +**Тип:** механическая (имена/значения полей карточки, имя файла) · **Приоритет:** 1. -- **Доказательство:** карточек 0 при трёх запусках flow_stats.py; baseline §1 - — петле 4 часа, §5.2 возлагает запись карточки на агента сессии («молча, - сразу») — механизм ничем не проверяется; baseline §2.5 — авто-записи - карточки нет ни в пресетах, ни в одном из 93 скриптов (grep - «карточк|flow_exp|FlowExp» — 0 совпадений). Прецедент механики есть: - плагин sys-qa-interactive использует хук PostToolUse (hooks.json, - timeoutMs 15000) — baseline §4. -- **Действие:** закрепить запись карточки механизмом, а не инструкцией: - хук плагина kit-knowledge (по прецеденту sys-qa-interactive) или - обязательная финальная стадия workflow/пресета («карточка + commit»). -- **Как проверить:** после следующего workflow-прогона в `runs/` появляется - карточка и `flow_stats.py` показывает «Карточек: ≥1». Контрольный срок — - 2 недели: снова 0 ⇒ механизм мёртв, эскалация владельцу навыка. +- **Доказательство:** первая карточка — `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 — `<дата>-<проект>-<шаг>-`); `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. Канонизировать словарь kind (иначе фильтры теряют карточки) -**Тип:** механическая · **Приоритет:** 2. +### R2. Поля карточки для А1/Б2/Б3/Г2: findings, findings_high, redo, tokens +**Тип:** механическая (имена полей карточки) · **Приоритет:** 2. -- **Доказательство:** README журнала — пример `kind: db` и словарь - «документ | требования | архитектура | db | этап-модуля»; SKILL.md - (строка 127 по baseline §1) — «БД»: расхождение регистра/языка в двух - документах плагина. Фильтр `--kind` требует ТОЧНОГО совпадения - (flow_stats.py:93 `meta.get("kind") != kind`) ⇒ «БД» и «db» станут двумя - разными классами, выборки будут терять карточки. -- **Действие:** зафиксировать в README единственный канонический словарь из - 5 значений (латинское `db`), синхронизировать SKILL.md; в flow_stats.py — - нормализация kind (trim/lower + синонимы «бд→db») до сравнения. -- **Как проверить:** тестовая карточка с `kind: БД` попадает в выборку - `--kind db`; в отчёте по kind класс один, а не два; в README и SKILL.md - словари совпадают дословно. - -### R3. Согласовать поля карточки с метриками А–Г (главное — findings и tokens) -**Тип:** механическая (имена полей карточки) · **Приоритет:** 3. - -- **Доказательство:** baseline §5: поле `revisions` численно не определено - (коллизия А1 «находки ревизии» vs Б2 «redo-прогоны»); нет поля для А1 — - единственной метрики с готовой базой (53→2), хотя findings[] есть в - отчёте каждого рана; `duration_min` покрывает только половину Б3 — - токенов в карточке нет; парсер распознаёт только белые списки - STR_FIELDS/NUM_FIELDS (flow_stats.py:23–25) — новые поля молча теряются. +- **Доказательство:** карточка: 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` = «циклы правок по находкам ревизии» (Б2 — отдельное поле); - добавить новые поля в NUM_FIELDS парсера одним коммитом с README. -- **Как проверить:** карточка-фикстура с новыми полями не теряет их при - прогоне flow_stats.py; в `_summary.md` по kind=этап-модуля появляется - среднее по findings — прямая сверка с целью А1 без ручного сбора. + `revisions` = «циклы правок по находкам ревизии»; темы эскалаций — + кратким списком в «Уроках» или полем `escalation_topics`; новые числовые + поля добавить в NUM_FIELDS парсера одним коммитом с README/SKILL.md. +- **Как проверить:** карточка-фикстура с новыми полями проходит парсер без + потерь; в `_summary.md` по kind=этап-модуля появляются средние + findings/redo — сверка с целями А1/Б2 без ручного сбора; для + preset-прогонов Б3 получает числа. -### R4. Доработать каркас пресетов до модального паттерна или снять приоритет -**Тип:** семантическая · **Приоритет:** 4. +### R3. Атрибуция журнала при прогонах над журналом: baseline HEAD + зоны +**Тип:** семантическая (зоны/areas исполнителей) · **Приоритет:** 3. -- **Доказательство:** 0 пресетных прогонов из 93 (grep маркеров пресета по - payload — 0 совпадений, baseline §2.2); в пресетах нет независимого - ревизора и интегратора как роли, только dotnet build/test (§2.5); - сгенерированный модальный паттерн Kit.RAG (3 агента/5 ask: зоны → - интегратор-гейт → ревизор свежим контекстом → контрольный гейт, §2.3) - совпадает с эталоном dx-flow «факт-в-факт» (§4) — пресеты от эталона - отстают. +- **Доказательство:** урок карточки «Вне-зонная запись в журнал + 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` к - модальному паттерну (исполнители по зонам с мандатами, интегратор-гейт, - ревизор свежим контекстом, контрольный гейт) и встроить запись карточки - (см. R1); до выравнивания не форсировать приоритет пресетов из §3.2 - SKILL.md. -- **Как проверить:** текст пресета содержит роли интегратора и ревизора - (grep); первый пресетный прогон даёт карточку с `form: preset`; в - `_summary.md` таблица «форма» наполняется обеими ветками (preset ≥1, - generated ≥1) — сравнение форм становится числовым. + модальному паттерну: исполнители по зонам с мандатами → интегратор-гейт → + ревизор свежим контекстом → контрольный гейт → финальная стадия «карточка + + commit» (закрывает и остаток прошлой R1); до выравнивания не форсировать + приоритет пресетов из §3.2 SKILL.md. +- **Как проверить:** grep ролей интегратора/ревизора в тексте пресета; + следующий пресетный прогон даёт карточку с findings и осмысленным + revisions, эскалации без разбухания approvals; в `_summary.md` таблица + «форма» наполняется обеими ветками. -### R5. Исполнить сработавшие триггеры Б1 и В4 (действия в проектах, через ретроспективу) -**Тип:** семантическая · **Приоритет:** 5. +### R6. Правило для аналитических/исследовательских задач (sd-анализ) +**Тип:** семантическая (роли/гейты класса задач) · **Приоритет:** 6. -- **Доказательство:** Б1 — И1 ~70 %, И2 ~56 %: две итерации подряд >50 % - при цели ≤40 % ⇒ триггер «упрощать каскад» УЖЕ сработал; приём «дублирование - статусов в 3+ документах — НЕ окупилось» в dx-flow есть, метрика всё равно - 🟡 — по правилу карточки: правило соблюдается, а метрика хуже цели ⇒ на - следующей ретроспективе пересмотреть оценку/соблюдение. В4 — возраст - docChanges до 4 этапов при цели ≤1 итерации ⇒ триггер «выносить легализацию - чаще». -- **Действие:** в ближайшей ретроспективе проекта (правки знаний — только - через неё): каскад статусов — строго одно место (readme модуля) + ссылки; - легализацию docChanges — на каждом замыкании этапа. -- **Как проверить:** замер git log проекта следующей итерации — доля - док-коммитов ≤50 % (цель ≤40 % к следующей); возраст старейшей записи - docChanges на легализации ≤1 итерации. Замеры фиксируются строкой - «итерация | метрика | значение | светофор | триггер | действие». +- **Доказательство:** урок карточки «Нет файла правил для + аналитических/исследовательских задач (ТЗ → отчёт → предложения)»: + этапы аудита и контрольной проверки строились по общему каркасу без + норматива; правила тестов c-tst/db-tst/d-tst неприменимы (задача не меняет + код/БД/DAL, правки плагина запрещены ТЗ); процессные шаги 1–7 process.md + не применялись. Урок прямо предписывает: «при повторении класса задач + стоит завести правило (например, sd-анализ)». +- **Действие:** завести правило класса: каркас «ТЗ → аудит/верификация по + ТЗ → доработка → независимая контрольная проверка → сдача владельцу»; + гейты класса — воспроизведение фактов и сверка с ТЗ вместо тестов; + утверждение через ретроспективу (std1-ext). +- **Как проверить:** следующая аналитическая задача строит план по правилу + (ссылка в плане рана); контрольная проверка класса идёт по формализованному + чек-листу, а не «по общему каркасу». -### R6. Исполнить триггер А2: приём против псевдо-якорей в dx-flow + dx-dev-8 -**Тип:** семантическая · **Приоритет:** 6. +### R7. Исполнить триггер А2 и закрытие находок контрольного гейта правкой +**Тип:** семантическая · **Приоритет:** 7. -- **Доказательство:** А2 = 2 (И3-э1) при цели 0, светофор 🟡; триггер метрики - требует «приём в dx-flow + формулировка dx-dev-8», но отдельного приёма в - таблице приёмов dx-flow нет — псевдо-якоря упомянуты только косвенно - (комментарий к «Ревизии свежим контекстом»). +- **Дока��ательство:** А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-dev-8 содержит требование живой перепроверки. -- **Как проверить:** в dx-flow появился приём с прецедентом-числом и строкой - замера; на следующем этапе с ревизией А2 = 0 (замер из findings карточки - по R3). + dx-flow приём «якоря перепроверяются живым запросом (dx-dev-8), числа — + независимым пересчётом» с числом-прецедентом; дополнить цикл этапа + (шаг «ПРАВКИ»): находки контрольного гейта закрываются правкой + артефакта, а не только документированием. +- **Как проверить:** приём с прецедентом-числом появился в dx-flow; на + следующем прогоне класса А2 = 0, за контрольным гейтом — diff правки + артефакта, а не только запись о находке. -### R7. Механические дефекты журнала: ссылка, пустая таблица, «#» в значениях -**Тип:** механическая · **Приоритет:** 7. +### 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); flow_stats.py render() при 0 карточек печатает - пустую таблицу «| форма | прогонов | success |» без строк (наблюдено в - текущем `_summary.md`); парсер режет «#» внутри значения - (flow_stats.py:60 `val.split(" #")[0]`) — значение с решёткой потеряет хвост. -- **Действие:** заменить ссылку на явный источник («эталон: + из корня журнала ведёт вне репозитория (оригинал карточки лежит в + 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 (формат карточки) — запрет `#` в значениях шапки. -- **Как проверить:** из журнала ссылка ведёт в осмысленное место либо - заменена текстовым указанием пути; `_summary.md` при 0 карточек без пустой - таблицы; карточка со значением без «#» читается парсером целиком. + в README (формат карточки) — запрет «#» в значениях шапки, кроме явного + комментария через пробел. +- **Как проверить:** ссылка из журнала ведёт в осмысленное место либо + заменена путём; выборка с 0 карточек без пустой таблицы; карточка со + значением без «#» читается парсером целиком. ## Не вошло в TOP (осознанно) - **В2 темы с первого захода 50 % < 75 %** — контур RAG-корпуса, не петля; триггер (тюнинг запросов, `--tag env:*`) уже в «Открытых хвостах» dx-flow. -- **А3, А4, Б2** — последние факты (И1/И2) хуже цели, но есть свежие - свидетельства исправления (И3–И7: замыкание с контрольным гейтом, - инструменты среды, redo 0); пересчёт возможен только по карточкам петли - (R1/R3), до того — ждать данных. -- **Г1–Г3, В1, В3, Б3** — в цели, светофор 🟢, действий не требуют. +- **А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 «документ») — везде 0 карточек; `_summary.md` - обновлён скриптом. -- Прочитаны README.md, dx-flow.md, baseline (карточек в runs/ нет — работа - по baseline, как предписывает инструкция). -- Записаны: `recommendations/2026-11-05-рекомендации.md` и - `_recommendations.md` (перезаписан). Карточки runs/ и остальные файлы - журнала не тронуты. Коммит не выполнялся (отдельный этап конвейера). + «этап-модуля»; kind «документ») — без ошибок; `_summary.md` перегенерирован + (теперь 1 карточка). +- Прочитаны README.md, dx-flow.md, единственная карточка + `runs/2026/2026-11-05-анализ-kit-dev-flow-10fa0e8f.md` (полностью, включая + разделы «Уроки»), baseline (до-петлевая фактура), прошлые рекомендации — + сверка прогресса: прошлая R1 частично закрыта появлением первой карточки. +- Записаны: этот файл и `_recommendations.md` (перезаписан). Карточки + `runs/` и остальные файлы журнала не тронуты (проверено `git status`: + изменены только `_summary.md`, `_recommendations.md`, + `recommendations/2026-11-05-рекомендации.md`; ветка main). Коммит не + выполнялся (отдельный этап конвейера). diff --git a/recommendations/2026-11-05-рекомендации.md b/recommendations/2026-11-05-рекомендации.md index b05c973..509cfca 100644 --- a/recommendations/2026-11-05-рекомендации.md +++ b/recommendations/2026-11-05-рекомендации.md @@ -1,177 +1,264 @@ # Рекомендации еженедельного анализа kit-dev-flow — 2026-11-05 Исполнитель: этап «analyst» конвейера (авто). Источники: `_summary.md` -(flow_stats.py от 2026-11-05), `baseline/2026-11-05-до-петли.md` (93 -до-петлевых прогона в 3 проектах, 23.10–04.11), `dx-flow.md` (эталон: -14 метрик А1–Г3, цели/триггеры, светофор от 2026-11-02). Карточек в -`runs/` нет — по инструкции анализ по до-петлевым свидетельствам baseline. +(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/` и остальные файлы журнала не изменялись. Коммит не выполнялся — +отдельный этап конвейера. ## Состояние на дату -- **Прогонов через петлю: 0.** `flow_stats.py` отработал без ошибок (EXIT=0) - по трём выборкам: все проекты (`--write-summary`), `--kind этап-модуля`, - `--kind документ` — везде «Карточек: 0 (проектов: 0)», средние «—». -- До-петлевая фактура (baseline §2): 93 workflow-прогона (Kit.RAG 84, - Kit.DevAi 7, Kit.ZСode.Plagins 2 + 3 dwfeval-прогона), все - **generated** — пресетных 0; 6 амдментов/resume из 93 (6,5 %). -- Новых замеров А1–Г3 нет: светофор остаётся от 2026-11-02 - (А1–А4, Б1, Б2, В2, В4 — 🟡; Б3, В1, В3, Г1–Г3 — 🟢). +- **Карточек в петле: 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 (метрики хуже цели — кандидаты в рекомендации) +## Сверка с целями dx-flow -| Метрика | Цель | Последний факт | Светофор | Триггер dx-flow | +### Метрики хуже цели — кандидаты в рекомендации (правило светофора) + +| Метрика | Цель | Последний факт | Светофор | Что нового за неделю | |---|---|---|---|---| -| А1 находки ревизии, high | high=0 | медиана 2/этап (И3–И6, цель ≤2 достигнута), но И3-э1: **2 high** | 🟡 | high на этапе → усилить B-блок ТЗ и фокус ревизии | -| А2 псевдо-якоря | 0 | И3-э1: **2** | 🟡 | >0 → приём в dx-flow + формулировка dx-dev-8 | -| А3 дефекты после замыкания | 0 | И1: этап «доезжал» **×2** (новее нет) | 🟡 | >0 → ужесточить замыкание (контрольный + хвосты) | -| А4 повторы известных граблей | 0 | И2: **3** (кодировка/лок/байты); И3: инструменты введены, повторов не зафиксировано | 🟡 | 1-й повтор → инструмент; 2-й → эскалация владельцу | -| Б1 доля док-коммитов | ≤40 % | И1 ~70 %, И2 ~56 % — **две итерации подряд >50 %** | 🟡 | >50 % две итерации → упрощать каскад (одно место статусов) | -| Б2 redo-прогоны/этап | ≤1 | И1 4, И2 2 (**хуже цели**); И3/И4 0 — тренд закрыл цель, данных петли нет | 🟡 | >2 → стабильность скриптов (маркер «ТЗ vN») | -| В2 темы с первого захода | ≥75 % | 2/4 = **50 %** | 🟡 | <75 % → тюнинг запросов / ускорить `--tag env:*` | -| В4 возраст docChanges | ≤1 итерации | до **4 этапов** | 🟡 | >1 итерации → выносить легализацию чаще | +| А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) | -Правило светофора соблюдено: каждая строка выше — кандидат; ниже — -TOP по стоимости/срочности. Метрики в цели (Б3 ×3–5, В1 16/16, В3, Г1–Г3) -в рекомендации не входят. +### Метрики в цели (🟢), которые карточка петли не измеряет (новое) + +| Метрика | Цель/тренг | Что показала первая карточка | +|---|---|---| +| Б3 wall-clock и токены | тренд ↓ на однотипных | duration_min: «-» («пресетом не фиксируется»), поля токенов нет — Б3 по петле не собирается (R2) | +| Г2 эскалации | закрытие ≤1 дня | счётчик есть (10), но время закрытия и разбивка по темам в карточку не попадают — прямой урок карточки (R2) | + +Правило отбора соблюдено: в TOP вошли все 🟡-кандидаты (кроме названных +исключений) плюс впервые доказанная неизмеримость 🟢-метрик и механические +дефекты журнала. ## TOP-рекомендации -### R1. Замкнуть петлю: запись карточки не должна держаться на памяти агента -**Тип:** семантическая · **Приоритет:** 1 (блокирует все остальные). +### R1. Формат полей карточки — по README, а не пути и прочерки +**Тип:** механическая (имена/значения полей карточки, имя файла) · **Приоритет:** 1. -- **Доказательство:** карточек 0 при трёх запусках flow_stats.py; baseline §1 - — петле 4 часа, §5.2 возлагает запись карточки на агента сессии («молча, - сразу») — механизм ничем не проверяется; baseline §2.5 — авто-записи - карточки нет ни в пресетах, ни в одном из 93 скриптов (grep - «карточк|flow_exp|FlowExp» — 0 совпадений). Преедент механики есть: - плагин sys-qa-interactive использует хук PostToolUse (hooks.json, - timeoutMs 15000) — baseline §4. -- **Действие:** закрепить запись карточки механизмом, а не инструкцией: - хук плагина kit-knowledge (по прецеденту sys-qa-interactive) или - обязательная финальная стадия workflow/пресета («карточка + commit»). -- **Как проверить:** после следующего workflow-прогона в `runs/` появляется - карточка и `flow_stats.py` показывает «Карточек: ≥1». Контрольный срок — - 2 недели: снова 0 ⇒ механизм мёртв, эскалация владельцу навыка. +- **Доказательство:** первая карточка — `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 — `<дата>-<проект>-<шаг>-`); `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. Канонизировать словарь kind (иначе фильтры теряют карточки) -**Тип:** механическая · **Приоритет:** 2. +### R2. Поля карточки для А1/Б2/Б3/Г2: findings, findings_high, redo, tokens +**Тип:** механическая (имена полей карточки) · **Приоритет:** 2. -- **Доказательство:** README журнала — пример `kind: db` и словарь - «документ | требования | архитектура | db | этап-модуля»; SKILL.md - (строка 127 по baseline §1) — «БД»: расхождение регистра/языка в двух - документах плагина. Фильтр `--kind` требует ТОЧНОГО совпадения - (flow_stats.py:93 `meta.get("kind") != kind`) ⇒ «БД» и «db» станут двумя - разными классами, выборки будут терять карточки. -- **Действие:** зафиксировать в README единственный канонический словарь из - 5 значений (латинское `db`), синхронизировать SKILL.md; в flow_stats.py — - нормализация kind (trim/lower + синонимы «бд→db») до сравнения. -- **Как проверить:** тестовая карточка с `kind: БД` попадает в выборку - `--kind db`; в отчёте по kind класс один, а не два; в README и SKILL.md - словари совпадают дословно. - -### R3. Согласовать поля карточки с метриками А–Г (главное — findings и tokens) -**Тип:** механическая (имена полей карточки) · **Приоритет:** 3. - -- **Доказательство:** baseline §5: поле `revisions` численно не определено - (коллизия А1 «находки ревизии» vs Б2 «redo-прогоны»); нет поля для А1 — - единственной метрики с готовой базой (53→2), хотя findings[] есть в - отчёте каждого рана; `duration_min` покрывает только половину Б3 — - токенов в карточке нет; парсер распознаёт только белые списки - STR_FIELDS/NUM_FIELDS (flow_stats.py:23–25) — новые поля молча теряются. +- **Доказательство:** карточка: 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` = «циклы правок по находкам ревизии» (Б2 — отдельное поле); - добавить новые поля в NUM_FIELDS парсера одним коммитом с README. -- **Как проверить:** карточка-фикстура с новыми полями не теряет их при - прогоне flow_stats.py; в `_summary.md` по kind=этап-модуля появляется - среднее по findings — прямая сверка с целью А1 без ручного сбора. + `revisions` = «циклы правок по находкам ревизии»; темы эскалаций — + кратким списком в «Уроках» или полем `escalation_topics`; новые числовые + поля добавить в NUM_FIELDS парсера одним коммитом с README/SKILL.md. +- **Как проверить:** карточка-фикстура с новыми полями проходит парсер без + потерь; в `_summary.md` по kind=этап-модуля появляются средние + findings/redo — сверка с целями А1/Б2 без ручного сбора; для + preset-прогонов Б3 получает числа. -### R4. Доработать каркас пресетов до модального паттерна или снять приоритет -**Тип:** семантическая · **Приоритет:** 4. +### R3. Атрибуция журнала при прогонах над журналом: baseline HEAD + зоны +**Тип:** семантическая (зоны/areas исполнителей) · **Приоритет:** 3. -- **Доказательство:** 0 пресетных прогонов из 93 (grep маркеров пресета по - payload — 0 совпадений, baseline §2.2); в пресетах нет независимого - ревизора и интегратора как роли, только dotnet build/test (§2.5); - сгенерированный модальный паттерн Kit.RAG (3 агента/5 ask: зоны → - интегратор-гейт → ревизор свежим контекстом → контрольный гейт, §2.3) - совпадает с эталоном dx-flow «факт-в-факт» (§4) — пресеты от эталона - отстают. +- **Доказательство:** урок карточки «Вне-зонная запись в журнал + 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` к - модальному паттерну (исполнители по зонам с мандатами, интегратор-гейт, - ревизор свежим контекстом, контрольный гейт) и встроить запись карточки - (см. R1); до выравнивания не форсировать приоритет пресетов из §3.2 - SKILL.md. -- **Как проверить:** текст пресета содержит роли интегратора и ревизора - (grep); первый пресетный прогон даёт карточку с `form: preset`; в - `_summary.md` таблица «форма» наполняется обеими ветками (preset ≥1, - generated ≥1) — сравнение форм становится числовым. + модальному паттерну: исполнители по зонам с мандатами → интегратор-гейт → + ревизор свежим контекстом → контрольный гейт → финальная стадия «карточка + + commit» (закрывает и остаток прошлой R1); до выравнивания не форсировать + приоритет пресетов из §3.2 SKILL.md. +- **Как проверить:** grep ролей интегратора/ревизора в тексте пресета; + следующий пресетный прогон даёт карточку с findings и осмысленным + revisions, эскалации без разбухания approvals; в `_summary.md` таблица + «форма» наполняется обеими ветками. -### R5. Исполнить сработавшие триггеры Б1 и В4 (действия в проектах, через ретроспективу) -**Тип:** семантическая · **Приоритет:** 5. +### R6. Правило для аналитических/исследовательских задач (sd-анализ) +**Тип:** семантическая (роли/гейты класса задач) · **Приоритет:** 6. -- **Доказательство:** Б1 — И1 ~70 %, И2 ~56 %: две итерации подряд >50 % - при цели ≤40 % ⇒ триггер «упрощать каскад» УЖЕ сработал; приём «дублирование - статусов в 3+ документах — НЕ окупилось» в dx-flow есть, метрика всё равно - 🟡 — по правилу карточки: правило соблюдается, а метрика хуже цели ⇒ на - следующей ретроспективе пересмотреть оценку/соблюдение. В4 — возраст - docChanges до 4 этапов при цели ≤1 итерации ⇒ триггер «выносить легализацию - чаще». -- **Действие:** в ближайшей ретроспективе проекта (правки знаний — только - через неё): каскад статусов — строго одно место (readme модуля) + ссылки; - легализацию docChanges — на каждом замыкании этапа. -- **Как проверить:** замер git log проекта следующей итерации — доля - док-коммитов ≤50 % (цель ≤40 % к следующей); возраст старейшей записи - docChanges на легализации ≤1 итерации. Замеры фиксируются строкой - «итерация | метрика | значение | светофор | триггер | действие». +- **Доказательство:** урок карточки «Нет файла правил для + аналитических/исследовательских задач (ТЗ → отчёт → предложения)»: + этапы аудита и контрольной проверки строились по общему каркасу без + норматива; правила тестов c-tst/db-tst/d-tst неприменимы (задача не меняет + код/БД/DAL, правки плагина запрещены ТЗ); процессные шаги 1–7 process.md + не применялись. Урок прямо предписывает: «при повторении класса задач + стоит завести правило (например, sd-анализ)». +- **Действие:** завести правило класса: каркас «ТЗ → аудит/верификация по + ТЗ → доработка → независимая контрольная проверка → сдача владельцу»; + гейты класса — воспроизведение фактов и сверка с ТЗ вместо тестов; + утверждение через ретроспективу (std1-ext). +- **Как проверить:** следующая аналитическая задача строит план по правилу + (ссылка в плане рана); контрольная проверка класса идёт по формализованному + чек-листу, а не «по общему каркасу». -### R6. Исполнить триггер А2: приём против псевдо-якорей в dx-flow + dx-dev-8 -**Тип:** семантическая · **Приоритет:** 6. +### R7. Исполнить триггер А2 и закрытие находок контрольного гейта правкой +**Тип:** семантическая · **Приоритет:** 7. -- **Доказательство:** А2 = 2 (И3-э1) при цели 0, светофор 🟡; триггер метрики - требует «приём в dx-flow + формулировка dx-dev-8», но отдельного приёма в - таблице приёмов dx-flow нет — псевдо-якоря упомянуты только косвенно - (комментарий к «Ревизии свежим контекстом»). +- **Доказательство:** А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-dev-8 содержит требование живой перепроверки. -- **Как проверить:** в dx-flow появился приём с прецедентом-числом и строкой - замера; на следующем этапе с ревизией А2 = 0 (замер из findings карточки - по R3). + dx-flow приём «якоря перепроверяются живым запросом (dx-dev-8), числа — + независимым пересчётом» с числом-прецедентом; дополнить цикл этапа + (шаг «ПРАВКИ»): находки контрольного гейта закрываются правкой + артефакта, а не только документированием. +- **Как проверить:** приём с прецедентом-числом появился в dx-flow; на + следующем прогоне класса А2 = 0, за контрольным гейтом — diff правки + артефакта, а не только запись о находке. -### R7. Механические дефекты журнала: ссылка, пустая таблица, «#» в значениях -**Тип:** механическая · **Приоритет:** 7. +### 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); flow_stats.py render() при 0 карточек печатает - пустую таблицу «| форма | прогонов | success |» без строк (наблюдено в - текущем `_summary.md`); парсер режет «#» внутри значения - (flow_stats.py:60 `val.split(" #")[0]`) — значение с решёткой потеряет хвост. -- **Действие:** заменить ссылку на явный источник («эталон: + из корня журнала ведёт вне репозитория (оригинал карточки лежит в + 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 (формат карточки) — запрет `#` в значениях шапки. -- **Как проверить:** из журнала ссылка ведёт в осмысленное место либо - заменена текстовым указанием пути; `_summary.md` при 0 карточек без пустой - таблицы; карточка со значением без «#» читается парсером целиком. + в README (формат карточки) — запрет «#» в значениях шапки, кроме явного + комментария через пробел. +- **Как проверить:** ссылка из журнала ведёт в осмысленное место либо + заменена путём; выборка с 0 карточек без пустой таблицы; карточка со + значением без «#» читается парсером целиком. ## Не вошло в TOP (осознанно) - **В2 темы с первого захода 50 % < 75 %** — контур RAG-корпуса, не петля; триггер (тюнинг запросов, `--tag env:*`) уже в «Открытых хвостах» dx-flow. -- **А3, А4, Б2** — последние факты (И1/И2) хуже цели, но есть свежие - свидетельства исправления (И3–И7: замыкание с контрольным гейтом, - инструменты среды, redo 0); пересчёт возможен только по карточкам петли - (R1/R3), до того — ждать данных. -- **Г1–Г3, В1, В3, Б3** — в цели, светофор 🟢, действий не требуют. +- **А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 «документ») — везде 0 карточек; `_summary.md` - обновлён скриптом. -- Прочитаны README.md, dx-flow.md, baseline (карточек в runs/ нет — работа - по baseline, как предписывает инструкция). -- Записаны: этот файл и `_recommendations.md` (перезаписан). Карточки runs/ - и остальные файлы журнала не тронуты. Коммит не выполнялся (отдельный - этап конвейера). + «этап-модуля»; kind «документ») — без ошибок; `_summary.md` перегенерирован + (теперь 1 карточка). +- Прочитаны README.md, dx-flow.md, единственная карточка + `runs/2026/2026-11-05-анализ-kit-dev-flow-10fa0e8f.md` (полностью, включая + разделы «Уроки»), baseline (до-петлевая фактура), прошлые рекомендации — + сверка прогресса: прошлая R1 частично закрыта появлением первой карточки. +- Записаны: этот файл и `_recommendations.md` (перезаписан). Карточки + `runs/` и остальные файлы журнала не тронуты. Коммит не выполнялся + (отдельный этап конвейера).