---
name: dartway-finish
description: >-
  Завершение dartway-задачи перед коммитом/PR (проекты DartWay): «definition of done».
  Аудитит дифф против базовой ветки по контракту dartway-clean-code (Flutter + сервер), проверяет
  дрейф документации затронутой фичи (docs/2_features/<FEATURE>.md по code-anchors) и
  покрытие тестами, затем ПОКАЗЫВАЕТ предложения и применяет ТОЛЬКО подтверждённое — ничего
  не меняет молча. Использовать, когда задача/фича закончена, перед коммитом или открытием PR
  (закон №6); запускается как /dartway-finish.
---

# DartWay — завершение задачи (`dartway-finish`)

«Definition of done» для dartway-задачи. Запускается, когда работа над задачей/фичей закончена — **перед коммитом/PR** (закон №6). Аудитит изменения, проверяет документацию и тесты, и помогает довести задачу до контракта.

## ⛔ Принцип безопасности

Скилл работает в три фазы и **никогда не меняет код или доки без явного подтверждения автора**. Фазы A (аудит) и B (предложения) — read-only. Фаза C (применение) — только то, что автор подтвердил. Спорное и архитектурное скилл **не трогает** — оставляет автору с пометкой.

Источник правил — `dartway-clean-code` (контракт чистоты), плюс `dartway-data-layer`, `dartway-models`, `dartway-crud-config`, `dartway-navigation`, `dartway-ui-kit`. Это тот же свод, что и у команды `/dartway-audit`; отличие: `dartway-finish` смотрит **дифф одной задачи** и добавляет docs-sync + проверку тестов + цикл подтверждения.

---

## Фаза A — Аудит (read-only)

### A.1 Скоуп диффа
Определи изменения: `git diff --stat origin/__BASE_BRANCH__...HEAD` + незакоммиченное (`git status`, `git diff`). Собери список изменённых `.dart`/`.spy.yaml`/доков.

**Исключи из аудита генерёнку** (её не ревьюят): `**/generated/**`, `*.g.dart`, `*.freezed.dart`, весь пакет `__CLIENT_PKG__`, `*.spy.yaml`-генерёнку. Аудитируем только рукописное.

### A.2 Аудит кода против контракта
Прогони детекторы **только по изменённым файлам** (не по всему репо). Для каждой находки — `file:line`.

**Flutter (`dartway-clean-code` Часть 1 + specials):**
- Несколько ответственностей в файле (длина — мягкий сигнал: >120 строк — присмотреться, >200 — ворнинг; осмысленный файл на 220 строк лучше бессмысленного попила).
- `BuildContext`/`WidgetRef` в параметрах сервисов/функций (не в `build`).
- `_buildXxx()`, возвращающий `Widget` (вместо виджет-класса).
- `ref.invalidate(...)` для рефреша.
- `GlobalKey().currentState/currentContext` для поиска в дереве.
- Внешние `padding`/`margin` на верхнем уровне `build` виджета.
- Приватные виджет-классы (`class _Foo extends ...Widget`) в публичных файлах фич.
- Нейминг < 2 слов; запрещённые `id`/`data`/`info`/`obj`/`temp`/`val`/`item`/`x`.
- Specials (`dartway-data-layer`): `SnackBar`/`ScaffoldMessenger` вместо `dw.notify.*`; `watchModel<UserProfile>()` вместо `ref.watchUserProfile`; сырой `onPressed`/`() async {}` вместо `DwUiAction.create`; сырые `Color`/`TextStyle`/`BorderRadius`/`context.theme` в фичах вместо UI Kit; `router.go()`/строковые роуты вместо enum-роутов и context-extensions (`dartway-navigation`).
- Изоляция фич: импорт не-entry-point чужой фичи.
- Часть 2: SRP/God-объекты, DRY (копипаста виджетов/маппингов), KISS/YAGNI, Law of Demeter (`a.b.c.d`), SoC (логика в State/UI), tell-don't-ask, магические числа/строки, единый источник истины, проглоченные ошибки (`catch (_) {}`, `catch ... return null`).

**Server (`dartway-crud-config` / `dartway-models`):**
- Произвольный эндпоинт вместо CRUD-конфига (без документированного исключения).
- Модель без `DwCrudConfig` или не зарегистрированная в `crudConfigurations`.
- Прямой апдейт поля (напр. `balance`) вместо Event-модели в транзакционной/денежной логике.
- Проглоченные ошибки в колбэках конфигов; nullable «ради UI» в `.spy.yaml`.

### A.3 Проверка документации (docs-sync)
- По изменённым путям определи затронутые фичи через **`code-anchors`** в шапках `docs/2_features/*.md` (each doc lists its code paths). Файл попадает под фичу, если его путь начинается с одного из её `code-anchors`.
- Для каждой затронутой фичи: прочитай её док и сверь с изменением — устарели ли описания флоу/полей/прав/эндпоинтов? Новая фича без дока → нужен новый док.
- Проверь, не разошлись ли утверждения `CLAUDE.md` (корневой/пакетные) или скиллов с изменённым кодом (двунаправленно — как мы нашли дрейф `DwCallback`→`DwUiAction`).

### A.4 Проверка тестов
- Нетривиальная логика/деньги/откаты-«даунгрейд» или багфикс **без теста** → флаг (`dartway-clean-code` Часть 3). Косметику не требуем.

---

## Фаза B — Предложения (показать, не применять)

Выдай структурированный отчёт в чат:

1. **🔴 Critical** — нарушения контракта/архитектуры, прячущие баги (Часть 1, проглоченные ошибки, God-объекты, нарушение изоляции фич, эндпоинт вместо CRUD). `file:line` + как чинить.
2. **🟡 Major** — серьёзные нарушения принципов (SRP, DRY, SoC, длинные файлы).
3. **🟢 Minor** — нейминг, магические числа, мелочи.
4. **📄 Docs** — какие feature-доки/`CLAUDE.md`/скиллы устарели, **с конкретным предложенным diff'ом** правки.
5. **🧪 Tests** — что из нетривиального не покрыто.

Для каждого пункта дай **конкретную предлагаемую правку**, готовую к применению. Спорное/архитектурное помечай «на решение автора» — не предлагай авто-правку.

---

## Фаза C — Применение (только по подтверждению)

- Спроси, что применить. Поддержи пакеты: «применить доки», «применить Minor», «применить всё кроме архитектурного», поштучно по номерам.
- Примени **только подтверждённое**. Ничего молча.
- После применения правок дока — обнови `last-verified` в его шапке на сегодняшнюю дату.
- Спорное/архитектурное не трогай, даже если автор сказал «всё» — переспроси по таким пунктам отдельно.
- В конце — короткое резюме: что применено, что осталось на авторе.

---

## Чем отличается от `/dartway-audit`

| | `dartway-finish` (скилл) | `/dartway-audit` (команда) |
|---|---|---|
| Скоуп | дифф одной задачи vs базовой ветки | целый модуль/папка по запросу |
| Доп. проверки | docs-sync + тесты + применение | только аудит кода |
| Вывод | отчёт + правки по подтверждению | отчёт в чат |
| Когда | завершая задачу, перед PR | глубокая проверка области по требованию |

Детекторы общие (источник — `dartway-clean-code`). Не дублируй логику — ссылайся на контракт.
