From 88b568e1e7ba183cf7be79880a4c32bad52c7c51 Mon Sep 17 00:00:00 2001 From: dev-runner Date: Fri, 6 Nov 2026 03:12:35 +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 | 46 +-- llm-artifacts/02-analysis.md | 353 +++++++++++---------- recommendations/2026-11-06-рекомендации.md | 295 +++++++++++++++++ 3 files changed, 508 insertions(+), 186 deletions(-) create mode 100644 recommendations/2026-11-06-рекомендации.md diff --git a/_recommendations.md b/_recommendations.md index 7acb049..2386811 100644 --- a/_recommendations.md +++ b/_recommendations.md @@ -1,31 +1,33 @@ -# Актуальные рекомендации kit-dev-flow (обновлено: 2026-11-05) +# Актуальные рекомендации kit-dev-flow (обновлено: 2026-11-06) -Полная версия с таблицей сверки метрик А1–Г3 и источниками: -[recommendations/2026-11-05-рекомендации.md](recommendations/2026-11-05-рекомендации.md) +Полная версия с таблицей сверки метрик А1–Г3, статусами исполнения и +источниками: [recommendations/2026-11-06-рекомендации.md](recommendations/2026-11-06-рекомендации.md) -Контекст недели: карточек в петле 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 (пути вместо имён проекта/шага). +Контекст периода: карточек в петле по-прежнему 1 — новых за 2026-11-05→06 +нет (срез `--kind этап-модуля` — 0). Светофор от 2026-11-02 без изменений +(А1–А4, Б1, Б2, В2, В4 🟡; Б3, В1, В3, Г1–Г3 🟢). Ни одна R1–R9 прошлого +анализа не исполнена (решения у владельца Р-1..Р-8); механические дефекты +перепроверены построчно и на месте; новый факт периода — многострочные уроки +теряют хвост при агрегации (R9). Окно Р-1 («формат карточки до первого +прогона этап-модуля») ещё открыто — утверждение P4+P5 остаётся самым дешёвым +по цене момента действием. ## TOP-рекомендации | # | Рекомендация | Тип | Доказательство (кратко) | Как проверить | |---|---|---|---|---| -| 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(" #") режет значения | ссылка заменена явным путём к эталону; отчёт без пустых таблиц; значения шапки читаются целиком | +| R1 | Формат полей карточки по README: `project`/`step` — короткие идентификаторы (не пути), `<шаг>` в имени файла, конвенция «не зафиксировано» | механическая | карточка 10fa0e8f:3–4 — полные пути (перепроверено 06.11); README:25,30–31 — `<дата>-<проект>-<шаг>-`, `project: kit-rag`; `_summary.md:12` — урок с путём дважды, «проектов: 1» = путь | следующая карточка с короткими project/step и `<шаг>` в имени; две карточки одного проекта → «проектов: 1» | +| R2 | Поля `findings`/`findings_high`/`redo`/`tokens` (+ темы эскалаций) в шапку карточки и NUM_FIELDS парсера | механическая | revisions 0 при коллизии А1/Б2; duration «-», токенов нет — Б3 неизмерима; урок: разбивка 10 эскалаций не попадает в формат; whitelist flow_stats.py:23–25 без изменений (проверено 06.11) | фикстура с новыми полями проходит парсер; средние findings/redo в `_summary.md` по kind=этап-модуля — сверка с А1/Б2 | +| R3 | Атрибуция журнала при прогонах над ним: baseline HEAD (`journal_base`) в карточке и/или журнал в areas исполнителя | семантическая | урок карточки: 2 вне-зонных коммита (075f063, e6c9559), контролёр «коммитов не делал», решение Р-8; сам прогон 06.11 baseline тоже не зафиксировал | в карточке прогона над журналом есть базовая ревизия; diff base..HEAD объясим зонами | +| R4 | Канон словаря kind в README и SKILL.md (`db`, не «БД»), нормализация в парсере | механическая | README:32 `db` (на месте, проверено 06.11) vs SKILL.md:127 «БД»; flow_stats.py:93–94 — строгое равенство 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:37–49 без строки (проверено 06.11) | приём с числом-прецедентом в dx-flow; следующий прогон: А2=0, за контрольным гейтом — diff правки | +| R8 | Исполнить сработавшие триггеры Б1 (70→56 % при цели ≤40 %, две итерации >50 %) и В4 (docChanges до 4 этапов): каскад в одно место, легализация на каждом замыкании — через ретроспективу | семантическая | Б1: И1 ~70 %, И2 ~56 %, 🟡; В4: до 4 этапов при цели ≤1 итерации; по правилу светофора (dx-flow:76–79) — пересмотр оценки правила на ретроспективе | замер git log: доля док-коммитов ≤50 % к следующей итерации; возраст docChanges ≤1 итерации | +| R9 | Механика журнала: битая ссылка dx-flow.md:8, пустая таблица форм при 0 карточек, обрезка «#» в значениях (flow_stats.py:60), обрезка многострочных уроков (flow_stats.py:73–74) — новое за период | механическая | ссылка ведёт вне репозитория; пустая таблица наблюдена сегодня в `--kind этап-модуля`; НОВОЕ: `_summary.md:12–13` — уроки обрываются на «: 2» и «:», хвосты («2 локальных коммита 075f063, e6c9559…») потеряны | ссылка заменена явным путём; отчёт без пустых таблиц; урок в `_summary.md` читается целиком до конца пункта | Правило отбора: метрика хуже цели dx-flow (А1–А4, Б1, Б2, В2, В4 — все 🟡) -→ кандидат; плюс первые петлевые факты: неизмеримость 🟢-метрик карточкой -(Б3, Г2) и механические дефекты журнала. Ранжировано по стоимости для -петли. В2 (контур RAG) и А4/Б2 (ждут данных петли) в TOP не вошли. +→ кандидат; плюс неизмеримость 🟢-метрик карточкой (Б3, Г2) и механические +дефекты журнала. Ранжирование и номера R1–R9 сохранены с 2026-11-05 — +фактуры периода для переранжирования нет (0 новых карточек, 0 новых +замеров). В2 (контур RAG) и А4/Б2 (ждут данных петли) в TOP не вошли. diff --git a/llm-artifacts/02-analysis.md b/llm-artifacts/02-analysis.md index 13caa3d..fcfdeef 100644 --- a/llm-artifacts/02-analysis.md +++ b/llm-artifacts/02-analysis.md @@ -1,118 +1,130 @@ -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 +# Рекомендации еженедельного анализа kit-dev-flow — 2026-11-06 Исполнитель: этап «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): с того замера в петле появилась первая карточка — она учтена, -ранжирование пересмотрено. +(перегенерирован этим прогоном `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-05-рекомендации.md` -(этот документ), `_recommendations.md` (перезаписан: TOP-таблица), -`_summary.md` (перегенерирован `flow_stats.py --write-summary`). Карточки -`runs/` и остальные файлы журнала не изменялись. Коммит не выполнялся — -отдельный этап конвейера. +**Артефакты, записанные в журнал этим прогоном:** +`recommendations/2026-11-06-рекомендации.md` (этот документ), +`_recommendations.md` (перезаписан: TOP-таблица), `_summary.md` +(перегенерирован скриптом). Карточки `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 — 🟢). Петлевые факты светофор не - переключают (замер — отчётом замыкания итерации проекта), но впервые - показали **измеримость** метрик карточкой — см. сверку. +- **Карточек в петле: 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 — пресет ревизий не содержит ⇒ А1 пресетной веткой не измеряется вовсе (R2/R5) | -| А2 псевдо-якоря | 0 | И3-э1: **2** | 🟡 | петлевой факт того же корня (точность без пересчёта): аудит приписал руну «grep ≥1» по 4 маркерам, воспроизведение — 2 маркера ×0 (R7) | -| А3 дефекты после замыкания | 0 | И1: этап «доезжал» **×2** | 🟡 | петлевой факт: находка контрольного гейта (LOW) задокументирована, но артефакт не правился — дефект живёт после замыкания (R7) | +| А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 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: «-» («пресетом не фиксируется»), поля токенов нет — Б3 по петле не собирается (R2) | -| Г2 эскалации | закрытие ≤1 дня | счётчик есть (10), но время закрытия и разбивка по темам в карточку не попадают — прямой урок карточки (R2) | +| Б3 wall-clock и токены | тренд ↓ на однотипных | duration_min «-» («пресетом не фиксируется», карточка:13), поля токенов нет (R2) | +| Г2 эскалации | закрытие ≤1 дня | счётчик есть (10), время закрытия и разбивка по темам в карточку не попадают — прямой урок карточки (R2) | -Правило отбора соблюдено: в TOP вошли все 🟡-кандидаты (кроме названных +Правило отбора соблюдено: в TOP — все 🟡-кандидаты (кроме названных исключений) плюс впервые доказанная неизмеримость 🟢-метрик и механические -дефекты журнала. +дефекты журнала. R1–R9 сохраняют номера и ранги прошлого анализа: фактуры +периода (0 новых карточек, 0 новых замеров) для переранжирования нет; к +каждой добавлен статус исполнения и перепроверка. ## TOP-рекомендации ### R1. Формат полей карточки — по README, а не пути и прочерки -**Тип:** механическая (имена/значения полей карточки, имя файла) · **Приоритет:** 1. +**Тип:** механическая (имена/значения полей карточки, имя файла) · **Приоритет:** 1 · **Статус против 2026-11-05:** не исполнено — перепроверено 06.11. -- **Доказательство:** первая карточка — `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 фрагментируется. +- **Доказательство:** карточка: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`) и имя файла `<дата>-<проект>-<шаг>-` — в имени + фактической карточки части `<шаг>` нет; `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); фиксацию длительности пресетом — в R5. -- **Как проверить:** следующая карточка: короткие `project`/`step`, `<шаг>` - в имени файла; две карточки одного проекта дают в `_summary.md` - «проектов: 1», а не 2. + идентификатор шага, незафиксированное значение — пустое или `-`, имя файла + — со всеми четырьмя частями; требование продублировать в генерацию карточки + (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. +**Тип:** механическая (имена полей карточки) · **Приоритет:** 2 · **Статус:** не исполнено — whitelist парсера без изменений (flow_stats.py:23–25, проверено 06.11). -- **Доказательство:** карточка: revisions 0 при kind=документ — «у пресета - нет циклов ревизии», а А1 — это находки ревизии (findings[] отчёта рана): - поле `revisions` численно не определено, коллизия А1/Б2 (baseline §5); - duration_min «-» и токенов нет — Б3 неизмерима; урок карточки прямо - требует: «разбивка по темам каждой эскалации в материал прогона не - попадает — учесть при доработке формата карточки/отчёта рана». - Парсер распознаёт только whitelist STR_FIELDS/NUM_FIELDS - (flow_stats.py:23–25) — новые поля молча теряются. +- **Доказательство:** единственная карточка: 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. + `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 получает числа. + потерь; в `_summary.md` по kind=этап-модуля появляются средние findings/redo + — сверка с А1/Б2 без ручного сбора; для preset-прогонов Б3 получает числа. ### R3. Атрибуция журнала при прогонах над журналом: baseline HEAD + зоны -**Тип:** семантическая (зоны/areas исполнителей) · **Приоритет:** 3. +**Тип:** семантическая (зоны/areas исполнителей) · **Приоритет:** 3 · **Статус:** не исполнено; сам этот прогон аналитика тоже не зафиксировал baseline HEAD (этап работал в окружении без git-бинарника, клон дан этапом 01-clone) — прецедент повторится, пока правила нет. - **Доказательство:** урок карточки «Вне-зонная запись в журнал DB.FlowExp_WorkStatistics в окне прогона»: 2 локальных коммита 18:16:09 @@ -125,124 +137,134 @@ атрибуция была формальной». - **Действие:** правило в dx-flow/SKILL.md: прогон, работающий над журналом опыта или иным общим репозиторием, фиксирует в карточке базовую ревизию - (поле `journal_base`) либо включает журнал в areas назначенного - исполнителя; изменения между base и HEAD вне зон — задаче не приписываются. + (поле `journal_base`) либо включает журнал в areas назначенного исполнителя; + изменения между base и HEAD вне зон — задаче не приписываются. - **Как проверить:** в следующей карточке прогона над журналом есть базовая - ревизия; diff base..HEAD объясним зонами; находки класса K1 («коммиты + ревизия; diff base..HEAD объясим зонами; находки класса K1 («коммиты неизвестного происхождения») не воспроизводятся. ### R4. Словарь kind: один канон в README и SKILL.md -**Тип:** механическая (словарь kind) · **Приоритет:** 4. +**Тип:** механическая (словарь 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) — - «БД» и «db» станут двумя классами, выборки потеряют карточки. Первая - карточка использовала «документ» (по README) для аналитической задачи — - отдельного значения/правила для этого класса нет (см. R6). + архитектура | 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. + для аналитического класса согласовать с R6. Входит в пакет Р-1. - **Как проверить:** тестовая карточка `kind: БД` попадает в выборку `--kind db`; в отчёте класс один; словари README и SKILL.md совпадают дословно. ### R5. Каркас пресета — до модального паттерна (ревизия, интегратор, запись карточки) -**Тип:** семантическая (топология/роли/гейты пресета) · **Приоритет:** 5. +**Тип:** семантическая (топология/роли/гейты пресета) · **Приоритет:** 5 · **Статус:** не исполнено — единственный preset-прогон в фактуре по-прежнему даёт revisions 0, escalations 10, result fail. -- **Доказательство:** первый пресетный прогон в фактуре: revisions 0 («у - пресета нет циклов ревизии»), escalations 10 при 4 агентах («заметная - часть решений ушла в approvals владельца» — Р-1..Р-8), result fail; в - пресетах нет ролей интегратора и независимого ревизора (baseline §2.5), - тогда как сгенерированный модальный паттерн Kit.RAG (зоны → - интегратор-гейт → ревизор свежим контекстом → контрольный гейт, - baseline §2.3) совпадает с эталоном dx-flow «факт-в-факт» (baseline §4). - Пресетная ветка не производит ни ревизий, ни данных для А1. +- **Доказательство:** первый и единственный пресетный прогон (до-петлевые 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» (закрывает и остаток прошлой R1); до выравнивания не форсировать - приоритет пресетов из §3.2 SKILL.md. + ревизор свежим контекстом → контрольный гейт → финальная стадия «карточка + + commit»; до выравнивания не форсировать приоритет пресетов из §3.2 SKILL.md. + Входит в решения владельца Р-2/Р-3. - **Как проверить:** grep ролей интегратора/ревизора в тексте пресета; следующий пресетный прогон даёт карточку с findings и осмысленным revisions, эскалации без разбухания approvals; в `_summary.md` таблица «форма» наполняется обеими ветками. ### R6. Правило для аналитических/исследовательских задач (sd-анализ) -**Тип:** семантическая (роли/гейты класса задач) · **Приоритет:** 6. +**Тип:** семантическая (роли/гейты класса задач) · **Приоритет:** 6 · **Статус:** не исполнено; этот еженедельный анализ — первый кандидат на применение правила (класс тот же: ТЗ → отчёт → рекомендации). - **Доказательство:** урок карточки «Нет файла правил для - аналитических/исследовательских задач (ТЗ → отчёт → предложения)»: - этапы аудита и контрольной проверки строились по общему каркасу без - норматива; правила тестов c-tst/db-tst/d-tst неприменимы (задача не меняет - код/БД/DAL, правки плагина запрещены ТЗ); процессные шаги 1–7 process.md - не применялись. Урок прямо предписывает: «при повторении класса задач - стоит завести правило (например, sd-анализ)». -- **Действие:** завести правило класса: каркас «ТЗ → аудит/верификация по - ТЗ → доработка → независимая контрольная проверка → сдача владельцу»; - гейты класса — воспроизведение фактов и сверка с ТЗ вместо тестов; - утверждение через ретроспективу (std1-ext). -- **Как проверить:** следующая аналитическая задача строит план по правилу - (ссылка в плане рана); контрольная проверка класса идёт по формализованному - чек-листу, а не «по общему каркасу». + аналитических/исследовательских задач (ТЗ → отчёт → предложения)»: этапы + аудита и контрольной проверки строились по общему каркасу без норматива; + правила тестов c-tst/db-tst/d-tst неприменимы (задача не меняет + код/БД/DAL, правки плагина запрещены ТЗ); процессные шаги 1–7 process.md не + применялись. Урок прямо предписывает: «при повторении класса задач стоит + завести правило (например, sd-анализ)». +- **Действие:** завести правило класса: каркас «ТЗ → аудит/верификация по ТЗ + → доработка → независимая контрольная проверка → сдача владельцу»; гейты + класса — воспроизведение фактов и сверка с ТЗ вместо тестов; утверждение + через ретроспективу (std1-ext). +- **Как проверить:** следующая аналитическая задача (включая следующий прогон + этого конвейерного анализа) строит план по правилу — ссылка в плане рана; + контрольная проверка идёт по формализованному чек-листу, а не «по общему + каркасу». ### R7. Исполнить триггер А2 и закрытие находок контрольного гейта правкой -**Тип:** семантическая · **Приоритет:** 7. +**Тип:** семантическая (гейты/приёмы dx-flow) · **Приоритет:** 7 · **Статус:** не исполнено — таблица приёмов dx-flow:37–49 по-прежнему без строки про пересчёт чисел/живые запросы якорей. -- **Дока��ательство:** А2 = 2 (И3-э1, 🟡), триггер требует «приём в dx-flow + - формулировка dx-dev-8» — отдельного приёма в таблице приёмов dx-flow нет. - Новый петлевой факт того же корня (утверждения без пересчёта): аудит - §2.2 приписал руну «grep ≥1 строка» по всем 4 маркерам пресета, - независимое воспроизведение (§2.3) — 2 маркера ×0; и связанный факт - класса А3: «аудит после себя не правил никто — расхождение живёт в - артефакте (LOW)» — находка контрольного гейта задокументирована, но не - закрыта правкой. +- **Доказательство:** А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; на + таблицу приёмов dx-flow строку «якоря перепроверяются живым запросом + (dx-dev-8), числа — независимым пересчётом» с числом-прецедентом; + дополнить шаг «ПРАВКИ» цикла этапа: находки контрольного гейта закрываются + правкой артефакта, а не только документированием. +- **Как проверить:** строка приёма с прецедентом-числом в dx-flow; на следующем прогоне класса А2 = 0, за контрольным гейтом — diff правки артефакта, а не только запись о находке. ### R8. Исполнить сработавшие триггеры Б1 и В4 (ретроспективой проекта) -**Тип:** семантическая · **Приоритет:** 8. +**Тип:** семантическая (каскад статусов, клапан легализации) · **Приоритет:** 8 · **Статус:** не исполнено — новых итераций проекта за период не было. - **Доказательство (без изменений с прошлого анализа):** Б1 — И1 ~70 %, И2 ~56 %: две итерации подряд >50 % при цели ≤40 % ⇒ триггер «упрощать - каскад» уже сработал, метрика 🟡; по правилу карточки dx-flow: правило - соблюдается, а метрика хуже цели ⇒ на следующей ретроспективе - пересматривается оценка правила/приёма. В4 — возраст docChanges до 4 - этапов при цели ≤1 итерации ⇒ триггер «выносить легализацию чаще». -- **Действие:** в ближайшей ретроспективе проекта: каскад статусов — - строго одно место (readme модуля) + ссылки; легализация docChanges — на - каждом замыкании этапа. + каскад» уже сработал, метрика 🟡; по правилу карточки dx-flow (строки + 76–79): правило соблюдается, а метрика хуже цели ⇒ на следующей + ретроспективе пересматривается оценка правила/приёма. В4 — возраст + docChanges до 4 этапов при цели ≤1 итерации ⇒ триггер «выносить легализацию + чаще». +- **Действие:** в ближайшей ретроспективе проекта: каскад статусов — строго + одно место (readme модуля) + ссылки; легализация docChanges — на каждом + замыкании этапа. - **Как проверить:** замер git log следующей итерации — доля док-коммитов ≤50 % (цель ≤40 % к следующей); возраст старейшей записи docChanges на - легализации ≤1 итерации; строка «итерация | метрика | значение | - светофор | триггер | действие» в отчёте замыкания. + легализации ≤1 итерации; строка «итерация | метрика | значение | светофор | + триггер | действие» в отчёте замыкания. -### R9. Механика журнала: ссылка, пустая таблица, «#» в значениях -**Тип:** механическая · **Приоритет:** 9. +### R9. Механика журнала: ссылка, пустая таблица, «#» в значениях, обрезка многострочных уроков +**Тип:** механическая (ссылки, вывод отчёта, парсер) · **Приоритет:** 9 · **Статус:** не исполнено — все три дефекта прошлого анализа перепроверены 06.11 и на месте; расширен новым фактом этого прогона (п. 4). -- **Доказательство:** dx-flow.md:8 — ссылка `[readme.md](../../readme.md)` - из корня журнала ведёт вне репозитория (оригинал карточки лежит в - std1-ext Kit.DevAi); `render()` при 0 карточек печатает пустую таблицу - «| форма | прогонов | success |» без строк — наблюдено в этом прогоне в - выборке `--kind этап-модуля`; парсер обрезает значение по «#» - (flow_stats.py:60 `val.split(" #")[0]`) — значение с решёткой потеряет - хвост, ограничение в README не описано (карточка использует «#»-комментарии - и читается корректно — риск только для «#» внутри значения). +- **Доказательство:** (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 (формат карточки) — запрет «#» в значениях шапки, кроме явного + склеивать строки одного пункта «Уроков» до следующего «- »/заголовка; в + README (формат карточки) — запрет «#» в значениях шапки, кроме явного комментария через пробел. -- **Как проверить:** ссылка из журнала ведёт в осмысленное место либо - заменена путём; выборка с 0 карточек без пустой таблицы; карточка со - значением без «#» читается парсером целиком. +- **Как проверить:** выборка с 0 карточек — без пустой таблицы; в + `_summary.md` урок читается целиком (до конца пункта); ссылка ведёт в + осмысленное место либо заменена путём; значение без «#» читается парсером + целиком. ## Не вошло в TOP (осознанно) @@ -253,18 +275,21 @@ - **Г1, Г3, В1, В3** — в цели, 🟢, действий не требуют. - **«Папка задачи вне git», «нет start.md/module_reqs.md»** — условия окружения конкретной задачи, дефектом процесса не являются. +- **Переранжирование R1–R9** — фактуры периода нет (0 новых карточек, 0 + новых замеров); номера сохранены для трассируемости с анализом + 2026-11-05. ## Что сделано этим прогоном аналитика - Запущен `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 частично закрыта появлением первой карточки. + «этап-модуля»; kind «документ») — EXIT=0, выводы идентичны прошлому замеру; + `_summary.md` перегенерирован. +- Прочитаны README.md, dx-flow.md, единственная карточка `runs/` (полностью, + включая «Уроки»), baseline, прошлые рекомендации и `_summary.md`; сверка + прогресса: R1–R9 не исполнены, механические дефекты перепроверены + построчно, зафиксирован один новый факт — обрезка многострочных уроков в + агрегате. - Записаны: этот файл и `_recommendations.md` (перезаписан). Карточки - `runs/` и остальные файлы журнала не тронуты (проверено `git status`: - изменены только `_summary.md`, `_recommendations.md`, - `recommendations/2026-11-05-рекомендации.md`; ветка main). Коммит не - выполнялся (отдельный этап конвейера). + `runs/` и остальные файлы журнала не тронуты. Коммит не выполнялся — + отдельный этап конвейера (этап аналитика работал в окружении без + git-бинарника; клон ветки main подготовлен этапом 01-clone). diff --git a/recommendations/2026-11-06-рекомендации.md b/recommendations/2026-11-06-рекомендации.md new file mode 100644 index 0000000..ca52d6d --- /dev/null +++ b/recommendations/2026-11-06-рекомендации.md @@ -0,0 +1,295 @@ +# Рекомендации еженедельного анализа 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`) и имя файла `<дата>-<проект>-<шаг>-` — в имени + фактической карточки части `<шаг>` нет; `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).