| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| Invoke | /e2e:explore |
| Aliases | /e2e:ex |
| Category | e2e-authoring |
| Complexity | moderate |
| MCP Servers | flutter-skill |
/e2e:explore โ ์ฑ์ ์ง์ ๋๋ฌ๋ณด๋ฉฐ ๋์ ๊ธฐ๋กํ๊ธฐ#
ํ๋ง๋๋ก#
์ค์ ๋ก ๋์๊ฐ๋ ์ฑ์ ์ฌ๋์ด ์์ผ๋ก ๋๋ฌ๋ณด๋ฏ ํ๋ฉด์ ํ์ํ๊ณ , "์ด๋๋ฅผ ์ด๋ค ์์๋ก ๋๋ ๋์ง"๋ฅผ ๊ทธ๋๋ก ๊ธฐ๋กํด ๋๋ ๋จ๊ณ์ ๋๋ค. ๋์ค์ ์๋ ํ ์คํธ๋ก ๋ง๋ค๊ธฐ ์ , ๋ง์น ์ฌ์ฉ ์ค๋ช ์ ์ด์์ ๋ง๋ค๊ธฐ ์ํด ์ฑ์ ์ง์ ์จ๋ณด๋ฉฐ ๋์ ์ ๋ฉ๋ชจํ๋ ๊ฒ๊ณผ ๊ฐ์์.
๋๊ฐยท์ธ์ ์ฐ๋์#
- ์ ๊ธฐ๋ฅ์ ๋ํ E2E(์ฒ์๋ถํฐ ๋๊น์ง ํ๋ฆ) ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ์ฒ์ ์์ฑํ๊ธฐ ์์ํ ๋
- ๊ธฐ์กด ์๋๋ฆฌ์ค์์ ๋น ์ง ๊ฒฝ๋ก๋ ์์ธ ์ํฉ(์ฃ์ง ์ผ์ด์ค)์ ๋ ์ฐพ์๋ณด๊ณ ์ถ์ ๋
- ์ฑ ํ๋ฉด ์์์ ์๋ณ๊ฐ(์์ ฏ Keyยทsemantic)์ ๋ฐ๊ฒฌํด ๋๊ณ ์ถ์ ๋
E2E ํ ์คํธ ๋ง๋ค๊ธฐ ์ ์ฒด ๊ณผ์ ์ค 1๋จ๊ณ(๋งจ ์ฒ์ ์ง์ ์ ) ์ ๋๋ค.
๋ฌด์์ ํด์ฃผ๋์#
ํ์ํ๋ฉด์ ๋ค์ ์ฐ์ถ๋ฌผ์ ๋จ๊น๋๋ค. ๋จ, ์ด ๊ฒฐ๊ณผ๋ฌผ์ ์ปค๋ฐ๋์ง ์๋ ์์ ๊ธฐ๋ก(ํ๋ฐ์ฑ) ์ด๋ฉฐ, ์ดํ /e2e:draft ๋จ๊ณ์์ ์ ์ ์๋๋ฆฌ์ค ์ด์์ผ๋ก ๋ณํ๋ฉ๋๋ค.
.claude/e2e-journal/{feature}.jsonlโ ์กฐ์ ์์๋ฅผ ๊ธฐ๋กํ ์ ๋(์์).claude/e2e-journal/screenshots/{feature}/*.pngโ ํ์ ์ค ์บก์ฒํ ์คํฌ๋ฆฐ์ท(์์)- ํ์ ์์ฝ ๋ฆฌํฌํธ โ ํ๋ฉด์ ์ถ๋ ฅ
์ด๋ป๊ฒ ์ฐ๋์#
# feature ๋ช
์
/e2e:explore sign_in
# ์์ ํ๋กฌํํธ๋ก ํ์ ์๋ ์ง์
/e2e:explore sign_in " ์ด๋ฉ์ผ ๋ก๊ทธ์ธ ์ฑ๊ณต + ์๋ชป๋ ๋น๋ฐ๋ฒํธ ์คํจ ๊ฒฝ๋ก ๋ ๋ค ๋ณด๊ณ ์ถ์ด "
# ์๋ ํ์ (auto-explore)
/e2e:explore sign_in --auto --depth=3
# ๋ชฝํค ํ
์คํธ
/e2e:explore sign_in --monkey --actions=50 --seed=42
sign_in๊ฐ์ ๋์ ๊ธฐ๋ฅ ์ด๋ฆ์ ๋ฐ๋์ ์ ๋ ฅํฉ๋๋ค(snake_case).- ๋ค์ ๋ฐ์ดํ๋ก ๋ฌด์์ ๋ณด๊ณ ์ถ์์ง ์์ฐ์ด๋ก ๋ง๋ถ์ผ ์ ์์ต๋๋ค.
-
--auto: ์ฌ๋์ด ์ผ์ผ์ด ์ ๋๋ฅด๊ณ ์ฑ์ด ์์์ ํ์ํ๊ฒ ํฉ๋๋ค.--depth=3์ผ๋ก ์ผ๋ง๋ ๊น๊ฒ ๋ค์ด๊ฐ์ง ์กฐ์ ํฉ๋๋ค. -
--monkey: ๋ฌด์์๋ก ๋ง๊ตฌ ๋๋ฌ๋ณด๋ ๋ชฝํค ํ ์คํธ ๋ชจ๋์ ๋๋ค.--actions=50(๋๋ฌ๋ณผ ํ์),--seed=42(๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ฌํํ๋ ๊ฐ)๋ก ์กฐ์ ํฉ๋๋ค. --device: ์ด๋ค ๊ธฐ๊ธฐ์์ ๋๋ฆด์ง ์ง์ ํฉ๋๋ค(์๋ตํ๋ฉด ์๋ ๊ฐ์ง).
์์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์#
- ์ด๋ฏธ ๋๋ ์์
์ธ์ง ํ์ธ โ ํด๋น ๊ธฐ๋ฅยท์๋๋ฆฌ์ค๊ฐ ์ด๋ฏธ ์ ๊ฒจ(lock) ์์ผ๋ฉด ๋ฉ์ถ๊ณ
/e2e:unlock์ ์๋ดํฉ๋๋ค. - ์ถฉ๋ ๊ฒ์ฌ โ ๋ค๋ฅธ ํ
์คํธ ๋ฌ๋(
patrol develop)๊ฐ ๋๊ณ ์์ผ๋ฉด ๋ฉ์ถฅ๋๋ค. - ์ฑ์ด ์ผ์ ธ ์๋์ง ํ์ธ โ ํ์ ๊ฐ๋ฅํ ์ํ๋ก ์ฑ์ด ๋ ์์ด์ผ ํ๋ฉฐ, ์๋๋ฉด ์ผ๋ ๋ช ๋ น์ ์๋ ค์ค๋๋ค.
- ํ์ ์ฐ๊ฒฐ ์ผ๊ธฐ โ ์ฑ๊ณผ ๋ํํ ํต๋ก(flutter-skill MCP)๋ฅผ ์ ์ ํ์ฑํํฉ๋๋ค.
- ๊ธฐ๋ก์ฅ ์ด๊ธฐ โ ์ ๋ ํ์ผ์ ๋ง๋ค๊ณ "ํ์ ์์" ํ์๋ฅผ ๋จ๊น๋๋ค.
- ํ์ ์ํ โ ์ค์ ๋ก ํ๋ฉด์ ๋๋ฌ๊ฐ๋ฉฐ ๋์ ์ ๊ธฐ๋กํฉ๋๋ค.
- ๊ธฐ๋ก์ฅ ๋ซ๊ธฐ โ "ํ์ ์ข ๋ฃ" ํ์๋ฅผ ๋จ๊ธฐ๊ณ ์ฐ๊ฒฐ์ ๋ค์ ๋๋๋ค.
- ๋ค์ ๋จ๊ณ ์๋ด โ ์ด์ด์
/e2e:draft๋ก ๋์ด๊ฐ๋๋ก ์ ์ํฉ๋๋ค.
โ๏ธ ์์ธ ์ต์ ยท์คํ ๋ช ์ธ (๊ฐ๋ฐ์ / AI ์์ด์ ํธ์ฉ)
Triggers#
- ์ feature ์ ๋ํ E2E ์๋๋ฆฌ์ค๋ฅผ ์ฒ์ ์์ฑํ ๋
- ๊ธฐ์กด ์๋๋ฆฌ์ค์ ๋๋ฝ ๊ฒฝ๋ก/์ฃ์ง ์ผ์ด์ค๋ฅผ ํ์ํ ๋
- ์ฑ ์์ ฏ Key/semantic ๋งคํ์ ๋ฐ๊ฒฌํ ๋
์ฌ์ฉ๋ฒ#
# feature ๋ช
์
/e2e:explore sign_in
# ์์ ํ๋กฌํํธ๋ก ํ์ ์๋ ์ง์
/e2e:explore sign_in " ์ด๋ฉ์ผ ๋ก๊ทธ์ธ ์ฑ๊ณต + ์๋ชป๋ ๋น๋ฐ๋ฒํธ ์คํจ ๊ฒฝ๋ก ๋ ๋ค ๋ณด๊ณ ์ถ์ด "
# ์๋ ํ์ (auto-explore)
/e2e:explore sign_in --auto --depth=3
# ๋ชฝํค ํ
์คํธ
/e2e:explore sign_in --monkey --actions=50 --seed=42ํ๋ผ๋ฏธํฐ#
| ํ๋ผ๋ฏธํฐ | ํ์ | ์ค๋ช | ๊ธฐ๋ณธ |
|---|---|---|---|
feature | โ | ๋์ feature ์ด๋ฆ (snake_case) | โ |
prompt | โ | ํ์ ์๋ ์์ฐ์ด | โ |
--auto | โ | flutter-skill explore ๋ชจ๋ ์ฌ์ฉ | false |
--depth | โ | auto-explore ๊น์ด | 3 |
--monkey | โ | ๋ชฝํค ํ ์คํธ ๋ชจ๋ | false |
--actions | โ | ๋ชฝํค ํ ์คํธ ์ก์ ์ | 50 |
--seed | โ | ๋ชฝํค ํ ์คํธ ์๋ | 42 |
--device | โ | ๋์ ๋๋ฐ์ด์ค | ์๋ ๊ฐ์ง |
์คํ ๋จ๊ณ#
- Lock ํ์ธ โ
.claude/e2e-lock.json์์feature+scenario๊ฐ ์ด๋ฏธ lock ๋์ด ์๋์ง ๊ฒ์ฌ. ์์ผ๋ฉด ์ค๋จํ๊ณ/e2e:unlock์๋ด - Patrol ๋ฌ๋ ์ถฉ๋ ํ์ธ โ
patrol develop์ด ์คํ ์ค์ด๋ฉด ์ค๋จ - ์ฑ ๊ธฐ๋ โ debug ๋น๋๋ก ์ฑ์ด ์คํ ์ค์ธ์ง ํ์ธ(kobic ์
kDebugMode๊ฐ๋๋ก flutter-skill ๋ฐ์ธ๋ฉ์ ๋ ธ์ถ โ ๋ณ๋--dart-define๋ถํ์). ์๋๋ฉด ์ฌ์ฉ์์๊ฒflutter run --debug๊ธฐ๋ ๋ช ๋ น ์ ์ - MCP ์ฐ๊ฒฐ ํ์ธ โ flutter-skill MCP ์๋ฒ ์ฐ๊ฒฐ ํ์ธ(debug ๋น๋์์ ์๋ ๋ ธ์ถ). ์ฐ๊ฒฐ ์ ๋๋ฉด 8๋จ๊ณ์ record-only ํด๋ฐฑ์ผ๋ก ์งํ(์ค๋จ ์๋)
- ์ ๋ ์ด๊ธฐ โ
.claude/e2e-journal/{feature}.jsonl์์ฑ/append,session_start์ด๋ฒคํธ ๊ธฐ๋ก - ํ์ ์ํ โ
exploration์คํฌ ํธ์ถ (skills/exploration/SKILL.md ์ฐธ์กฐ) - ์ ๋ ๋ซ๊ธฐ โ
session_end์ด๋ฒคํธ ๊ธฐ๋ก + flutter-skill MCP disable - ๋ค์ ๋จ๊ณ ์๋ด โ
/e2e:draftํธ์ถ ์ ์
์ถ๋ ฅ#
.claude/e2e-journal/{feature}.jsonl(ํ๋ฐ์ฑ).claude/e2e-journal/screenshots/{feature}/*.png(ํ๋ฐ์ฑ)- ํ์ ์์ฝ ๋ฆฌํฌํธ (stdout)
์คํจ ์ผ์ด์ค#
| ์์ธ | ๋์ |
|---|---|
| debug ๋น๋ ์๋(๋ฆด๋ฆฌ์ค ๋น๋) | flutter run --debug ๊ธฐ๋ ๋ช
๋ น ์ถ๋ ฅ ํ ์ค๋จ (kobic ์ kDebugMode ๊ฐ๋ โ --dart-define ๋ถํ์) |
patrol develop ์คํ ์ค | ์ค๋จ, patrol ์ธ์ ์ข ๋ฃ ์๋ด |
| ์ด๋ฏธ lock ๋ ์๋๋ฆฌ์ค ์ฌํ์ ์๋ | /e2e:unlock ์๋ด ํ ์ค๋จ |
| flutter-skill MCP ์ฐ๊ฒฐ ์คํจ | record-only ํด๋ฐฑ โ ์ฌ์ฉ์๊ฐ ํญ/์
๋ ฅ์ ๊ตฌ์ ํ๋ฉด ์์ด์ ํธ๊ฐ .jsonl ์ ๋์ ์๊ธฐ ๊ธฐ๋ก(=/e2e:draft ์งํ ๊ฐ๋ฅ). ์ง๋จ์ cc-dev-cycle:mcp-debug (unsafeโ์ค๋จ, tooling ๋ถ์ฌโdegrade ๊ตฌ๋ถ) |
๊ด๋ จ#
- skills/exploration/SKILL.md
- commands/e2e/draft.md โ ๋ค์ ๋จ๊ณ
- rules/binding-gating.md โ ๊ฒ์ดํ ํ์ค