card: kit-dev-flow прогон dwfrun-11c8179d — DevHub итерация «группы шаблонов + IsAuto + фильтр списков» (partial, 13 агентов, 21 эскалация)
This commit is contained in:
parent
88b568e1e7
commit
0802ceed54
|
|
@ -0,0 +1,165 @@
|
||||||
|
---
|
||||||
|
date: 2026-11-06 10:28 # конец окна прогона (этапный коммит 3584c6d в 10:10, карточка 10:28); точное время пресетом не фиксируется
|
||||||
|
project: tasks/1-devhub/шаблоны-группы-isauto
|
||||||
|
step: tasks/1-devhub/шаблоны-группы-isauto
|
||||||
|
kind: этап-модуля
|
||||||
|
form: preset
|
||||||
|
preset: kit-dev-process
|
||||||
|
model: GLM-5.3-Flash
|
||||||
|
agents: 13
|
||||||
|
revisions: 0 # у пресета нет циклов ревизии
|
||||||
|
escalations: 21
|
||||||
|
result: partial
|
||||||
|
duration_min: "-" # пресетом не фиксируется
|
||||||
|
run_id: dwfrun-11c8179d-2b4a-4f42-9eca-597e7b82bfd6
|
||||||
|
---
|
||||||
|
## Что делали
|
||||||
|
|
||||||
|
Задача — итерация «группы шаблонов + флаг IsAuto + фильтр списков» в рамках
|
||||||
|
шага 7 «Итерационная разработка» проекта DevHub (std1/_process/process.md §7).
|
||||||
|
Бриф — tasks/1-devhub/шаблоны-группы-isauto/start.md; module_reqs.md в папке
|
||||||
|
нет (проверено ls 2026-11-06 10:28: в папке 6 файлов — start.md, тз-этапа.md,
|
||||||
|
рецепт_этапа.md, ревизия-этапа.md, отчёт_замыкания_итерации.md,
|
||||||
|
метрики-итерации.md), шаги 1–6 проекта закрыты (plan.md:10-16), поэтому sd-init
|
||||||
|
и d-drg к задаче не применимы — диаграмм в границах изменений нет. Размах:
|
||||||
|
TaskHub (миграция 020 БД, функции, репозиторий, контроллер, синк-сервис,
|
||||||
|
C#-тесты), DevHub (Flutter: модель, фильтр в двух списках, редактор, сиды,
|
||||||
|
Dart-тесты) и документы итерации.
|
||||||
|
|
||||||
|
План построен по конвейеру dx-flow: «ТЗ этапа → Реализация → Интегратор-гейт →
|
||||||
|
Ревизия свежим контекстом → Правки по находкам ревизии → Контрольный гейт →
|
||||||
|
Замыкание итерации: каскад, метрики, коммит» — с обязательными ролями
|
||||||
|
интегратора-гейта и ревизора свежим контекстом (прямое требование
|
||||||
|
start.md:132-138) и в режиме авточемода (plan.md:24-27, start.md:6-9): работа не
|
||||||
|
останавливается на развилках вне брифа — они фиксируются в approvals владельца с
|
||||||
|
honest-skip затронутой части. 13 агентов, 21 эскалация.
|
||||||
|
|
||||||
|
Итог partial: код и тесты этапа реализованы, точечные прогоны зелёные, этапный
|
||||||
|
коммит 3584c6d сделан 2026-11-06 10:10 (проверено git show --stat: 32 файла,
|
||||||
|
+2256/−54). Не закрыто прогоном: полный гейт (dotnet build Kit.TaskHub.slnx,
|
||||||
|
полный dotnet test, flutter) по B4 — зона интегратора, исполнителю запрещён;
|
||||||
|
раздел метрик сдан после этапного коммита (отклонение от буквы задания
|
||||||
|
задокументировано в §9 отчёта замыкания — проверка этой сессии: метрики-итерации.md
|
||||||
|
создан 10:11:40, через 90 секунд после коммита, и на момент карточки ещё не
|
||||||
|
закоммичен, git status «??»); psql-покрытие db-tst отсутствует (honest-skip);
|
||||||
|
ручная приёмка на живом стенде и решение о заведении db-tst — за владельцем.
|
||||||
|
Детали — в «Уроках».
|
||||||
|
|
||||||
|
## Уроки (что учесть в следующий раз)
|
||||||
|
|
||||||
|
### Неудачи и хвосты
|
||||||
|
|
||||||
|
- **Утверждение брифа о тестах репозитория не подтвердилось**: задание
|
||||||
|
утверждало «тесты репозитория — файл существует, проверено find», но
|
||||||
|
отдельного файла тестов SQL-репозитория в Hub.Tests нет (find 2026-11-06:
|
||||||
|
только PipelineTemplatesControllerTests.cs с FakeRepo на
|
||||||
|
IPipelineTemplateRepository). Шва подмены транспорта в SQL-реализации нет —
|
||||||
|
PgSql.cs:117-131 строит NpgsqlCommand по string connectionString, юнит-тест
|
||||||
|
репозитория без БД невозможен. Компенсации: сверка колонок
|
||||||
|
group/is_auto в Select/List с db/020 по CommandText (миграция прочитана
|
||||||
|
фактически), 4 контроллерных теста на новые поля через FakeRepo, интеграционный
|
||||||
|
тест интегратора ТЗ §2.6(д) на копии схемы. Учесть: при планировании тестов
|
||||||
|
перепроверять утверждения брифа о существовании файлов до записи их в план;
|
||||||
|
для репозиториев поверх Npgsql без шва закладывать интеграционный тест на
|
||||||
|
копию схемы, а не юнит.
|
||||||
|
- **Полный гейт не гонялся — и правильно**: dotnet build Kit.TaskHub.slnx /
|
||||||
|
полный dotnet test / flutter по B4 принадлежат интегратору, исполнителю
|
||||||
|
запрещены; точечные прогоны зелёные. Проекты вне Hub.Core/Hub/Hub.Tests
|
||||||
|
(Implementations, Runner) точечным прогоном не накрыты — до интегратора это
|
||||||
|
надо явно числить в отчёте, а не терять.
|
||||||
|
- **Этапный коммит выполнен ДО сдачи раздела метрик** (честно задокументировано
|
||||||
|
в §9 отчёта замыкания): стадии «ревизор-метрик» в плане этапа не было,
|
||||||
|
артефактов метрик на момент замыкания не существовало (grep «метрик» по папке
|
||||||
|
задачи и find -name '*метрик*' — пусто; ls tasks/1-devhub/1-docs/0-mng — файла
|
||||||
|
нет). Состав этапного коммита по заданию (результат+ТЗ+отчёты+рецепт) метрики
|
||||||
|
не включает, содержимое коммита от порядка не зависит; авточемод предписывает
|
||||||
|
не останавливать работу. Факт этой сессии: метрики-итерации.md создан 10:11:40
|
||||||
|
(после коммита 10:10) и ждёт отдельного документационного коммита после
|
||||||
|
независимого пересчёта. Учесть: если метрики обязательны — закладывать стадию
|
||||||
|
ревизора-метрика в план ДО этапа замыкания, иначе раздел метрик опаздывает
|
||||||
|
структурно, а не случайно.
|
||||||
|
- **Токены и wall-clock этапов/итерации недоступны из прогона**: платформа
|
||||||
|
workflow не отдаёт, в реестре этапов не фиксировались — в E2 записано честно
|
||||||
|
«не измерено» списком (dx-check E2); время в §1.1 отчёта — время
|
||||||
|
ТЕСТ-ПРОГОНОВ сессии замера, а не этапов, подменять им этапные метрики нельзя.
|
||||||
|
- **Независимая перепроверка ревизии сделана выборкой, не полным перебором**:
|
||||||
|
20 из ~40 якорей (все точны), полный список покрывает ревизия-этапа.md §4.
|
||||||
|
Приемлемая форма, но долю выборки и ссылку на полный список надо фиксировать
|
||||||
|
явно — чтобы выборочную перепроверку не читали как полный повтор гейта.
|
||||||
|
- **Метрика «доля документационных коммитов итерации» на момент замера
|
||||||
|
не существует** (коммита ещё не было): дан замер по истории ветки (51% вся,
|
||||||
|
80% последние 10), пересчёт после этапного коммита передан каскаду. Урок:
|
||||||
|
метрики, зависящие от итогового коммита, планировать после него с явной
|
||||||
|
передачей каскаду, а не «посчитать сейчас».
|
||||||
|
- **Собственный инструмент может врать**: первая версия python-парсера сидов
|
||||||
|
дала 2 ложных «✗» (в сверку попали имена файлов вместо имён шаблонов) —
|
||||||
|
ошибка инструмента, не данных; после исправления все 4 сверки чисты (§1.5).
|
||||||
|
Учесть: вердикт самодельного парсера перепроверять глазами на малой выборке
|
||||||
|
до записи результата.
|
||||||
|
- **Конфликт с пулом правил db-tst-3 (honest-skip отчёта §4.2)**: psql-тестов
|
||||||
|
на переписанные функции config.Pipeline_Template_Insert/Select/List нет —
|
||||||
|
каталога apps/TaskHub/db/tests не существует (ls: No such file or directory).
|
||||||
|
Покрытие — только C#-тесты контроллера на FakeRepo + функциональные пробы по
|
||||||
|
рецепту. Отступление от «каждая функция покрывается тестами: основной +
|
||||||
|
граничные» остаётся открытым хвостом (пересекается с В-4) до решения
|
||||||
|
владельца о заведении db-tst.
|
||||||
|
- **Конфликт с пулом правил d-tst-10 (находка В-4)**: PipelineTemplateRepository
|
||||||
|
(Sql/) без unit-теста транспорта — шва подмены в PgSql (строка подключения,
|
||||||
|
NpgsqlCommand) нет; компенсации (сверка CommandText↔db/020, контроллерные
|
||||||
|
тесты) проверены. Закрытие — тот же шов, что и в первом пункте: либо шов
|
||||||
|
подмены в PgSql, либо интеграционный тест на копию схемы как норма для
|
||||||
|
SQL-репозиториев.
|
||||||
|
- **Расхождение семантики фейка и прод-кода (наблюдение ревизии, в реализацию
|
||||||
|
не вмешивались)**: FakeRepo (PipelineTemplatesControllerTests.cs:36-50) на
|
||||||
|
ветви «существующая строка» возвращает сохранённые Group/IsAuto строки, а
|
||||||
|
SQL-реализация (PipelineTemplateRepository.cs:43-47) — переданные значения
|
||||||
|
(функция Insert возвращает только created/id/name); ветвь тестом не покрыта.
|
||||||
|
Контракт интерфейса (IPipelineTemplateRepository.cs:42-46) отсылает за
|
||||||
|
фактическими значениями к Select/SelectAll — дефектом по контракту не
|
||||||
|
является, но есть кандидаты: ветвь-тест либо выравнивание фейка. Учесть:
|
||||||
|
при добавлении новых полей сверять семантику фейка с SQL-реализацией, а не
|
||||||
|
только с интерфейсом.
|
||||||
|
- **Escalations: 21 при 13 агентах** — заметная часть решений ушла в approvals
|
||||||
|
владельца; разбивка по темам каждой эскалации в материал прогона не попадает
|
||||||
|
(тот же слепой слот, что в карточке dwfrun-10fa0e8f с 10 эскалациями при
|
||||||
|
4 агентах) — формату отчёта рана нужен состав эскалаций, иначе петля
|
||||||
|
«неудачные приёмы исключаются» работает вслепую.
|
||||||
|
|
||||||
|
### Лимиты и условия
|
||||||
|
|
||||||
|
- **Правил Dart/Flutter в корпусе нет**: реестр std1/_rules/readme.md §4.2
|
||||||
|
покрывает только C#/SQL/d-области (d-fe и прочие ⬜ «по мере появления» —
|
||||||
|
readme.md:71-73,103). Flutter-зона велась по карте кода и проектным решениям
|
||||||
|
start.md и паттернам существующего кода DevHub; машинная проверка — только
|
||||||
|
flutter analyze / flutter test. До появления правила зона будет повторяться
|
||||||
|
в каждом Flutter-этапе.
|
||||||
|
- **psql-тесты db-tst в apps/TaskHub/db не заведены** (ls: только миграции
|
||||||
|
001–019, папки tests/ нет), и прогон PL/pgSQL-тестов не входит в гейты
|
||||||
|
итерации (start.md:122-127). Обновлённые функции 020 проверяются опосредованно
|
||||||
|
— C#-тестами и подъёмом миграции на тестовой БД; полноценное покрытие db-tst —
|
||||||
|
отдельное решение владельца, прогон его выполнить не сможет.
|
||||||
|
- **Именование функций TaskHub (Pipeline_Template_Insert, PascalCase)
|
||||||
|
расходится с нормой readme.md §6 ({слой}.{сущность}_{действие})**: итерация
|
||||||
|
сохраняет существующие имена через CREATE OR REPLACE по брифу
|
||||||
|
(start.md:89-93) — переименование вне границ итерации.
|
||||||
|
- **Передача isAuto=true из потока создания задачи из СУЗ вне границ
|
||||||
|
итерации**: карта кода start.md:48-52 фиксирует, что автозаписей шаблонов при
|
||||||
|
создании задачи нет и появиться не должно (SupertaskController/
|
||||||
|
SupertaskExpander не трогаются) — параметр апсёрта существует с default false;
|
||||||
|
правка потока СУЗ — будущая отдельная задача.
|
||||||
|
- **Живая приёмка и рестарт контейнеров — только владелец** (start.md:9,
|
||||||
|
129-130): ручной проход UI на стенде и рестарт недоступны прогону; его
|
||||||
|
пределы — гейты build/test/analyze и подъём миграции на тестовой БД.
|
||||||
|
- **Критерий отбора is_auto=true «API-шаблоны (id 5–8 на стенде)» проверяется
|
||||||
|
по данным живой БД стенда, недоступной из прогона**: ревизия проверяет код
|
||||||
|
миграции (критерий по данным с комментарием), но не сами данные стенда.
|
||||||
|
- **Метрики токенов/wall-clock (Б3, E2)** — только если платформа workflow
|
||||||
|
отдаёт числа; иначе честное «не измерено», не синтетика.
|
||||||
|
- **Файла ретроспективы проекта DevHub нет** (ls tasks/1-devhub/1-docs/0-mng/):
|
||||||
|
приписка E4 кладётся в отчёт замыкания итерации, а не в отдельный файл;
|
||||||
|
создание постоянного файла ретроспективы — решение владельца.
|
||||||
|
- **Развилка вне брифа требует эскалации владельцу**: в режиме авточемода
|
||||||
|
прогон сам её закрыть не может — либо ждёт ответ, либо фиксирует развилку в
|
||||||
|
approvals с honest-skip затронутой части. При 21 эскалации это основной
|
||||||
|
механизм превращения «partial» в «success» — скорость ответа владельца
|
||||||
|
определяет доезжание хвостов.
|
||||||
Loading…
Reference in New Issue