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