flutterlisted
Install: claude install-skill snwlee/Nereus
# flutter
nereus:common 규칙을 따른다. 워크플로는 **nereus 코어가 소유한다**.
제작 층 판단(코어 루프 · 계층 경계 · 수직 슬라이스 · 서버 권위)은 `nereus-game:craft` 가 하고
여기서 되풀이하지 않는다. 이 스킬은 **Flutter 고유 절차**만 담는다.
## 1. 스택 판정은 코어 것을 쓴다
코어가 이미 `pubspec.yaml` → `flutter`, `dev_dependencies` 의 `flutter_test` → `flutter test`
를 판정한다. **`nereus-extension.json` 의 `stacks` 에 flutter 를 넣지 않는다** —
같은 것을 두 곳이 정하면 어긋날 때 어느 쪽이 진실인지 알 수 없다.
여기는 **게임에 필요한 사실**을 얹는다:
```bash
echo '{"root":"."}' | node "${CLAUDE_PLUGIN_ROOT}/lib/flutter-stack.mjs"
```
`detectFlutterGame` 한 번이면 다른 검사기의 입력이 전부 나온다:
```
detectFlutterGame → { runner, flame, flavors, layers, notes }
↓ ↓
parity-check purity-check
```
**`flavors` 가 `null` 이면 "없다"가 아니라 "못 찾았다"** 이고 이유가 `notes` 에 실린다.
빈 배열을 넘기면 `parity-check` 가 플레이버 없는 프로젝트로 읽어 검사 대상이 아니라고 판정한다.
## 2. 순수 코어 — Flutter 에서 무엇이 순수인가
`craft` 의 판정 질문을 그대로 쓴다: **위젯 트리와 기기 없이 호출해 결과를 단언할 수 있는가.**
순수 층에 들어오면 안 되는 것: `package:flutter/` · `dart:ui` · `dart:io` ·
플러그인 패키지(저장·광고·Firebase·경로) · 상태 관리 패키지.
`layers.json` 의 flutter 경계가 이것을 데이터로 들고 있고 `purity-check` 가 집행한다.
**`dart:ui` 가 특히 새기 쉽다.** `Color` · `Offset` · `Size` 가 거기 있어서
"이 정도는 값 타입인데" 하고 들이게 된다. 들이는 순간 그 파일은 순수가 아니고,
색·좌표 계산을 위젯 없이 골든으로 고정할 수 없게 된다. 자기 값 타입을 쓰고 표현 층에서 변환한다.
**설정과 규칙을 같은 층에 두지 않는다.** 원격 설정이 규칙 층에 스며들면 플래그 하나가
규칙을 바꾸는 경로가 숨는다. 규칙은 값을 인자로 받고, 어디서 읽는지는 몰라야 한다.
## 3. 테스트 — 층마다 도구가 다르다
| 층 | 도구 | 특징 |
|---|---|---|
| 순수 규칙 | `test` (순수 Dart) | 밀리초. 여기로 최대한 민다 |