| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| Invoke | /e2e:lock |
| Aliases | /e2e:l |
| Category | e2e-authoring |
| Complexity | moderate |
/e2e:lock โ ํต๊ณผํ ํ ์คํธ๋ฅผ "๊ณต์ ์ํ์ง"๋ก ๋ฐ์ #
ํ๋ง๋๋ก#
๊ฒ์ฆ์ ํต๊ณผํ ์๋ํ ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ํ๊ท ์ํ์ง(CI ํ๊ท ์ค์ํธ)์ ๋์ฅ ์ฐ์ด ๋ฑ๋กํ๋ ๋จ๊ณ์ ๋๋ค. ํ ๋ฒ ํฉ๊ฒฉํ ๋ชจ์๊ณ ์ฌ ๋ฌธ์ ๋ฅผ "์ด์ ๋ถํฐ ๋งค๋ฒ ํธ๋ ์ ์ ์ํ ๋ฌธ์ "๋ก ํ์ ํ๋ ๊ฒ๊ณผ ๊ฐ์์. ๋ฑ๋ก ํ์๋ ํจ๋ถ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค(๋๋๋ฆฌ๋ ค๋ฉด ๋ช ์์ ์ธ unlock์ด ํ์).
๋๊ฐยท์ธ์ ์ฐ๋์#
- ํ ์คํธ ์๋๋ฆฌ์ค ์์ฑ(step-implement)์ ๋๋ด๊ณ , ์๋ ์คํ ๊ฒฐ๊ณผ๊ฐ PASS(ํฉ๊ฒฉ) ๋ก ๋์จ ์งํ
- ๊ทธ ์๋๋ฆฌ์ค๋ฅผ CI ํ๊ท ํ ์คํธ(์ฝ๋๊ฐ ๋ฐ๋ ๋๋ง๋ค ์๋์ผ๋ก ๋๋ ๊ฒ์ฌ)์ ์ ์์ผ๋ก ํฌํจ์ํค๊ณ ์ถ์ ๋
๋ฌด์์ ํด์ฃผ๋์#
ํต๊ณผํ ์๋๋ฆฌ์ค๋ฅผ ๊ฒ์ฆํ ๋ค, ์ ์ ํ ์คํธ ๋ชฉ๋ก์ ๋ฑ๋กํ๊ณ ์์ ์์ ๊ธฐ๋ก์ ์ ๋ฆฌํด ์ค๋๋ค. ๋๋๋ฉด ๋ค์์ด ๋จ์ต๋๋ค.
test_bundle.dart์์ โ ์ ์ฒด ํ ์คํธ ๋ฌถ์์ ์๋๋ฆฌ์ค ์ถ๊ฐrun_all_scenarios.sh์์ โ ํ ๋ฒ์ ์คํํ๋ ์คํฌ๋ฆฝํธ ๊ฐฑ์.claude/e2e-lock.json๊ฐฑ์ โ "์ด๋ค ์๋๋ฆฌ์ค๋ฅผ ๋ฐ์ ํ๋์ง" ๊ธฐ๋ก (์ปค๋ฐ ๋์)- ์์ ์์ ๊ธฐ๋ก(์ ๋)์ ์ญ์ ํ๊ฑฐ๋ ๋ณด๊ดํจ(archive)์ผ๋ก ์ด๋
- ์ถ์ฒ ์ปค๋ฐ ๋ฉ์์ง ์ ์:
test(e2e): lock {feature}/{scenario}
์ด๋ป๊ฒ ์ฐ๋์#
# ๋จ์ผ ์๋๋ฆฌ์ค ๋ฐ์
/e2e:lock sign_in email_login_success
# feature ์ ์ฒด ๋ฐ์ (ํด๋น feature์ ๋ชจ๋ ์๋๋ฆฌ์ค)
/e2e:lock sign_in --all
# pre-lock ๊ฒ์ฆ๋ง ์ํ (์ค์ lock ์ํจ)
/e2e:lock sign_in email_login_success --dry-run
# ์ ๋์ archive ๋ก ๋ณด๊ดํ๋ฉฐ lock
/e2e:lock sign_in email_login_success --archive-journal
feature(ํ์): ๊ธฐ๋ฅ ์ด๋ฆ (์:sign_in)scenario(ํ์): ์๋๋ฆฌ์ค ์ด๋ฆ. ๋จ,--all์ ์ฐ๋ฉด ์๋ต ๊ฐ๋ฅ--all: ํด๋น ๊ธฐ๋ฅ์ ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ํ๊บผ๋ฒ์ ๋ฐ์ --dry-run: ์ค์ ๋ก ๋ฑ๋กํ์ง ์๊ณ "ํต๊ณผํ๋์ง ๊ฒ์ฆ๋ง" ๋ฏธ๋ฆฌ ํด๋ณด๊ธฐ--archive-journal: ์์ ๊ธฐ๋ก์ ์ง์ฐ์ง ์๊ณ ๋ณด๊ดํจ์ผ๋ก ์ฎ๊ธฐ๊ธฐ (๊ธฐ๋ณธ์ ์ญ์ )
์์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์#
ํฌ๊ฒ ๊ฒ์ฆ โ ๋ฑ๋ก โ ์ ๋ฆฌ โ ๊ธฐ๋ก โ ๋ณด๊ณ ์์๋ก ์งํ๋ฉ๋๋ค.
- ์ฌ์ ์ ๊ฒ โ ์๋๋ฆฌ์ค ํ์ผ์ด ์ ์๋ฆฌ์ ์๋์ง, ๋น ์ง ๋ถ๋ถ์ ์๋์ง, ๋ง์ง๋ง ์๋ ์คํ์ด ํฉ๊ฒฉ์ด์๋์ง ๋ฑ์ ๊ผผ๊ผผํ ๊ฒ์ฌํฉ๋๋ค. ํ๋๋ผ๋ ๋ฏธ๋ฌ์ด๋ฉด ๋ฑ๋กํ์ง ์๊ณ ๋ฉ์ถฅ๋๋ค(๊ฐ์ ๋ฑ๋ก ๊ธ์ง).
- ์ ์ ๋ชฉ๋ก ๋ฑ๋ก โ ์ ์ฒด ํ ์คํธ ๋ฌถ์๊ณผ ์คํ ์คํฌ๋ฆฝํธ์ ์ด ์๋๋ฆฌ์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
-
CI ์ฐ๊ฒฐ ํ์ธ โ ์๋ ๊ฒ์ฌ ์ค์ (
.github/workflows/e2e-patrol.yml)์ด ์ ์ฐ๊ฒฐ๋ผ ์๋์ง ํ์ธํ๊ณ ํ์ํ ๋ณด์์ ์ ์ํฉ๋๋ค. - ์์ ๊ธฐ๋ก ์ ๋ฆฌ โ ์์ ํ๋ฉด์ ๋จ๊ธด ์ ๋์ ์ญ์ ํ๊ฑฐ๋ ๋ณด๊ดํจ์ผ๋ก ์ฎ๊น๋๋ค.
- ๋ฐ์ ๊ธฐ๋ก ์์ฑ โ "๋ฌด์์ ๋ฑ๋กํ๋์ง"๋ฅผ
.claude/e2e-lock.json์ ๋จ๊น๋๋ค. - ๊ฒฐ๊ณผ ๋ณด๊ณ โ ๋ฑ๋ก ๊ฒฝ๋ก, CI ์คํ ๋ช ๋ น, ์ถ์ฒ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์ ๋ฆฌํด ์๋ ค์ค๋๋ค.
๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด(์: ์ฌ์ ์ ๊ฒ ์คํจ, ๋ง์ง๋ง ์คํ์ด ๋ถํฉ๊ฒฉ, ์ด๋ฆ ์ค๋ณต) ๊ทธ ์์ธ์ ์๋ ค์ฃผ๊ณ ๋ค์์ ๋ฌด์์ ํด์ผ ํ ์ง ์๋ดํฉ๋๋ค.
โ๏ธ ์์ธ ์ต์ ยท์คํ ๋ช ์ธ (๊ฐ๋ฐ์ / AI ์์ด์ ํธ์ฉ)
Triggers#
- step-implement ์๋ฃ ํ patrol_mcp
run๊ฒฐ๊ณผ๊ฐ PASS - ์๋๋ฆฌ์ค๋ฅผ CI ํ๊ท์ ํฌํจ์ํค๋ ค ํ ๋
์ฌ์ฉ๋ฒ#
# ๋จ์ผ ์๋๋ฆฌ์ค ๋ฐ์
/e2e:lock sign_in email_login_success
# feature ์ ์ฒด ๋ฐ์ (ํด๋น feature์ ๋ชจ๋ ์๋๋ฆฌ์ค)
/e2e:lock sign_in --all
# pre-lock ๊ฒ์ฆ๋ง ์ํ (์ค์ lock ์ํจ)
/e2e:lock sign_in email_login_success --dry-run
# ์ ๋์ archive ๋ก ๋ณด๊ดํ๋ฉฐ lock
/e2e:lock sign_in email_login_success --archive-journalํ๋ผ๋ฏธํฐ#
| ํ๋ผ๋ฏธํฐ | ํ์ | ์ค๋ช | ๊ธฐ๋ณธ |
|---|---|---|---|
feature | โ | feature ์ด๋ฆ | โ |
scenario | โ * | ์๋๋ฆฌ์ค ์ฌ๋ฌ๊ทธ | โ |
--all | โ | feature ๋ด ๋ชจ๋ ์๋๋ฆฌ์ค lock | false |
--dry-run | โ | ๊ฒ์ฆ๋ง ์ํ | false |
--archive-journal | โ | ์ ๋์ .claude/e2e-journal/archive/ ๋ก ์ด๋ (๊ธฐ๋ณธ์ ์ญ์ ) | false |
*--all ๋ฏธ์ฌ์ฉ ์ ํ์
์คํ ๋จ๊ณ#
- Pre-lock ๊ฒ์ฆ (skills/scenario-lock/SKILL.md ์ฐธ์กฐ)
- ์๋๋ฆฌ์ค ํ์ผ ์กด์ฌ + ์์น
- step ํจ์ ๋งคํ ์์ ์ฑ
- semantic ref ์์กด ๊ฒ์ฌ
- flutter-skill import ์์กด ๊ฒ์ฌ
- patrol_mcp ๋ง์ง๋ง run PASS
- canonical step ๊ท์ฝ ์ค์
- Bundle ๋ฑ๋ก โ
test_bundle.dart,run_all_scenarios.sh์ ๋ฐ์ดํธ - CI ์ฐ๊ฒฐ ์ ๊ฒ โ
.github/workflows/e2e-patrol.ymlํ์ธ + ์ ์ - ์ ๋ ์ ๋ฆฌ โ ์ญ์ ๋๋ archive ์ด๋
- Lock ๋ ์ฝ๋ ์์ฑ โ
.claude/e2e-lock.json์ ๋ฐ์ดํธ (์ปค๋ฐ ๋์) - ๋ฆฌํฌํธ โ ๋ฑ๋ก ๊ฒฝ๋ก, CI ๋ช ๋ น, ์ ์ ์ปค๋ฐ ๋ฉ์์ง
์ถ๋ ฅ#
test_bundle.dart์์ run_all_scenarios.sh์์ .claude/e2e-lock.json๊ฐฑ์ (์ปค๋ฐ ๋์)- ์ ๋ ์ญ์ or archive ์ด๋
- ์ ์ ์ปค๋ฐ ๋ฉ์์ง:
test(e2e): lock {feature}/{scenario}
์คํจ ์ผ์ด์ค#
| ์์ธ | ๋์ |
|---|---|
| Pre-lock ๊ฒ์ฆ ์คํจ | ์์ธ ๋ฆฌํฌํธ + ์ค๋จ (๊ฐ์ lock ๊ธ์ง) |
| patrol_mcp ๋ง์ง๋ง run FAIL | step-implement ์ฌ์ง์ ์๋ด |
| semantic ref ์์กด | ํด๋น ์ฝ๋ ์์น ์ถ๋ ฅ + key-hardening ์ฌ์คํ ์๋ด |
| ์๋๋ฆฌ์ค๋ช ์ค๋ณต | ๊ธฐ์กด lock ๋ ์ฝ๋์ ์ถฉ๋ ๋ฆฌํฌํธ |
๊ด๋ จ#
- skills/scenario-lock/SKILL.md
- commands/e2e/draft.md โ ์ด์ ๋จ๊ณ
- rules/selector-policy.md, rules/feature-file-conventions.md