| name | framework-finish |
| description | Аудит синхронизации перед коммитом изменений фреймворка DartWay — проверяет, что изменения публичного API отражены в example/, template/, toolkit/skills/, docs/ и CHANGELOG. Запускать после завершения работы над кодом пакетов, перед коммитом/PR. |
framework-finish — аудит синхронизации монорепо
Монорепо DartWay живёт по закону синхронизации (см. корневой CLAUDE.md): публичный API, example, template, скиллы тулкита и доки эволюционируют вместе, в одном PR. Этот скилл ловит рассинхроны по диффу.
Шаг 1. Собери дифф
git diff <base>...HEAD --stat
База — master, если не сказано иное. Интересуют изменения в packages/.
Шаг 2. Определи изменения публичного API
Публичный API пакета = его экспорты: файлы, доступные через lib/<package>.dart и lib/src/..., реэкспортируемые наружу. Изменением API считается:
- новый / удалённый / переименованный публичный класс, метод, параметр, extension;
- изменение сигнатуры или поведения публичного метода;
- изменение дефолтов конфигов (
DwCrudConfig, DwSaveConfig, DwAuthConfig, ...);
- новые обязательные шаги инициализации (
DwCore.init, setupRepository, ...).
Чисто внутренние правки (private-код, рефакторинг без смены поведения, zarchive/) — не API.
Шаг 3. Проверь пять зеркал
Для каждого изменения API проверь, отражено ли оно в:
| Зеркало | Что проверять |
|---|
example/ | Использует ли example затронутый API; компилируется ли; демонстрирует ли новую возможность |
template/ | Компилируется ли скелет. Это то, что получает каждый новый проект через dartway create; шаблон никто не запускает в буднях, поэтому он гниёт молча, а узнаёшь об этом от чужого человека. Если API затронул auth, роли, навигацию, админку, UI-кит или DwCore.init — шаблон почти наверняка задет |
toolkit/skills/ | grep по старым именам/сигнатурам в toolkit/skills/*/SKILL.md и toolkit/CLAUDE.md — скиллы не должны учить агентов устаревшему API |
docs/ | grep по затронутым понятиям — страницы не должны противоречить коду |
CHANGELOG.md пакета | Есть ли запись под текущую (unreleased) версию |
Шестое зеркало — за пределами репозитория. Изменил packages/dartway_studio_bridge — у контракта две стороны, и вторая живёт в отдельном репозитории (dartway/dartway_studio). Соседства папок больше нет, поэтому проверка держится только на этом пункте:
- поле добавлено в модель моста → Studio должна его показывать, иначе оно доезжает и пропадает;
- поле удалено или переименовано → Studio сломается на разборе.
Если чекаут Studio есть на машине — посмотри и скажи, что там нужно поправить. Если нет — назови это в отчёте явным пунктом: «мост изменился, сторона Studio не проверена». Молча пропускать нельзя: рассинхрон моста не ловится ни компилятором, ни чекером — он проявляется пустой панелью в Studio.
То же касается docs/ и сайта, но мягче: сайт — потребитель, он забирает содержимое сам.
Дополнительно (быстро):
- тулкит-инвариант:
grep -rniE 'tvolkova|tvaity|kerla' toolkit/ → пусто;
- скелет-инвариант: в
template/ нет доменных моделей — grep -riE 'club|booking|chat|news|fitness' template/ --include=*.dart --include=*.spy.yaml → пусто. Домен просачивается в шаблон незаметно (скопировали виджет из example — приехал ClubSession);
- миграции и генерат шаблона под контролем версий (
git ls-files template/dartway_starter_server/migrations/ | head -1 → не пусто). Однажды они были в .gitignore, и dartway create месяцами отдавал проект, который не поднимается: локально папка есть, в клоне — нет;
- в дифф не попали новые файлы в
zarchive//zarchiv/;
- новые пользовательские строки в ядре — на английском;
- новые конфиги доступа не вводят «открыто всем» как умолчание.
Шаг 4. Отчёт и исправление
Выдай список рассинхронов в формате: <API-изменение> → <зеркало> → <что именно устарело/отсутствует>. Если рассинхронов нет — скажи это одной строкой.
Предложи конкретные правки. Применяй только подтверждённые — кроме тривиальных (CHANGELOG-запись, поправка имени метода в скилле), которые можно применить сразу, перечислив их.