E2E Authoring Agent#
| 항목 | 내용 |
| 모델 | sonnet |
| 사용 도구 |
Read
,
Edit
,
Write
,
Bash
,
Glob
,
Grep
|
| 연계 스킬 |
exploration
,
scenario-draft
,
key-hardening
,
step-implement
,
scenario-lock
,
feature-test-bundle
|
flutter-skill 은 "AI 가 빠르게 이해하고 초안을 뽑는 단계"에만 사용하고,
박제된 회귀는 Patrol 코드로만 실행되도록 강제하는 오케스트레이터.
기능 구현 시 unit + BDD(Patrol E2E 전용) + E2E 3 레이어를 번들로 묶어 지휘한다.
트리거#
@e2e-authoring-agent 호출
-
/cc-e2e:explore, /cc-e2e:draft, /cc-e2e:kick-off, /cc-e2e:lock
커맨드 실행 시 자동 활성
- 키워드: "E2E 시나리오", "Patrol 테스트 작성", "flutter-skill 탐색", "테스트 번들"
- 단계 게이팅 — 이전 단계 산출물이 없으면 다음 단계 진입 차단
- MCP 서버 토글 — flutter-skill / patrol_mcp 상호 배타
- Lock 상태 추적 —
.claude/e2e-lock.json 으로 박제 시나리오 재탐색 차단
- 번들 오케스트레이션 — feature-test-bundle 이 unit/BDD/E2E 3 레이어를 순차 스캐폴드
-
기존 에이전트 위임 —
cc-flutter:test, cc-flutter:bdd-step-reuse-agent
에 적절히 넘김
6단계 파이프라인#
┌─────────────────────────────────────────────────────────────────────┐
│ ⓪ KICK-OFF (선택) — feature-test-bundle │
│ - unit 레이어: UseCase/BLoC 스캐폴드 (cc-flutter:unit-testing)│
│ - BDD 레이어: .feature + TestDriver step (손수 작성, 생성기 없음) │
│ - E2E 레이어: integration_test/features/ 진입 │
└──────────────────────────────┬──────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ ① EXPLORE │
│ - MCP: flutter-skill ON, patrol_mcp OFF │
│ - 저널: .claude/e2e-journal/{feature}.jsonl │
│ - 스킬: exploration │
└──────────────────────────────┬──────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ ② DRAFT │
│ - MCP: flutter-skill OFF (저널만 읽음) │
│ - 출력: app/{app}/integration_test/features/*.feature (영어+한글 주석) │
│ + key-harden-targets.md + step-hints.md │
│ - 스킬: scenario-draft │
└──────────────────────────────┬──────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ ③ KEY-HARDEN │
│ - MCP: 없음 (소스 patch) │
│ - 출력: package/test_driver/lib/src/key/k.dart + 위젯 key 주입 │
│ - 스킬: key-hardening │
└──────────────────────────────┬──────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ ④ STEP-IMPLEMENT │
│ - MCP: patrol_mcp ON, flutter-skill OFF │
│ - TestDriver step 작성 → Patrol E2E 시나리오 손수 작성 (생성기 없음) │
│ - 같은 Background 3건+ → 화면 배치 파일 1개 + 리셋 step │
│ - 스킬: step-implement + cc-flutter:bdd-testing │
└──────────────────────────────┬──────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ ⑤ LOCK │
│ - Pre-lock 9-check │
│ - test_bundle.dart + .claude/e2e-lock.json │
│ - 저널/아티팩트 정리 │
│ - 스킬: scenario-lock │
└──────────────────────────────┬──────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ ⑥ CI (관장 밖) │
│ - flutter-skill 바인딩 OFF 빌드에서 Patrol 회귀 │
└─────────────────────────────────────────────────────────────────────┘
게이팅 규칙#
단계 진입 검증#
| 단계 | 진입 전 확인 | 실패 시 |
| ⓪ KICK-OFF |
feature 소스가 기본 scaffold 를 가짐 (Clean Arch layer 3개) |
cc-flutter:feature:* 먼저 호출 |
| ① EXPLORE | .claude/e2e-lock.json 에 해당 scenario 없음 | unlock 안내 |
| ① EXPLORE | patrol develop 미실행 | patrol 세션 종료 안내 |
| ② DRAFT | 저널 파일 + session_end 이벤트 | exploration 재진입 |
| ③ KEY-HARDEN |
.feature 초안 + key-harden-targets.md |
draft 재진입 |
| ④ STEP-IMPL | semantic ref → K 치환 완료 | key-hardening 완료 요구 |
| ④ STEP-IMPL | flutter-skill MCP OFF 확인 | 강제 disable |
| ⑤ LOCK | Pre-lock 9-check 통과 | 원인 리포트 + 중단 |
MCP 서버 상호 배타#
- flutter-skill 과 patrol_mcp 를 동시에 활성화하지 않음
- 단계 전환 시 이전 MCP 를 먼저 disable 후 다음 MCP enable
-
상태 로그 출력 예:
[e2e] ① EXPLORE 진입: flutter-skill ON, patrol_mcp OFF
[e2e] ④ STEP-IMPL 진입: flutter-skill OFF, patrol_mcp ON
다른 에이전트/스킬과의 관계#
| 항목 | 관계 | 위임 조건 |
cc-flutter:unit-testing |
위임 (UseCase/BLoC unit test) |
feature-test-bundle 의 Unit 레이어 |
cc-flutter:bdd-testing |
상위 문서 (.feature → Patrol E2E 저작) |
step-implement 가 이 규약 따름 |
cc-flutter:integration-testing |
위임 (Patrol integration_test scaffold) |
앱 레벨 시나리오 |
cc-flutter:test (에이전트) |
위임 (단위/위젯/BLoC/골든 작성) |
unit 레이어 + widget 상세 |
cc-flutter:bdd-step-reuse-agent |
협업 (공유 step 발견/승격) |
2개 이상 feature 에서 반복되는 step |
cc-flutter:rules/bdd-test-patterns.md |
조직 표준 (K class, TestDriver) |
본 에이전트는 이 규약 재정의 ❌ |
cc-dev:mcp-debug | MCP 연결 문제 시 위임 | MCP 서버 응답 실패 |
cc-bricks | feature scaffold 생성 | kick-off 전 feature 가 없을 때 |
cc-quality:bug-report | 탐색 중 버그 이슈화 | bug_note 이벤트 |
실패 시나리오 대응#
| 상황 | 에이전트 동작 |
| flutter-skill MCP 연결 실패 | cc-dev:mcp-debug 위임 |
patrol_mcp run FAIL | step-implement 에 실패 step 명시하여 재진입 |
| K 자동 탐지 실패 (후보 다수) | 수동 선택지 제시, 임의 선택 금지 |
| 저널 손상 (JSON 파싱 실패) | 손상 지점까지만 draft, 사용자 확인 |
| lock 된 시나리오 재탐색 요청 | /e2e:unlock 안내 (unlock 커맨드는 차후 구현) |
Patrol 시나리오 파일(scenarios/*_test.dart) 컴파일 실패 (step 이름 불일치) |
step 파일명/함수명 매핑 재검토 + dart analyze (코드 생성기가 없으므로 빌드가 아니라 analyze/리뷰에서 잡는다) |
| cross-feature 시나리오 감지 |
해당 없음 — draft(②) 단계부터 이미 app/{app}/integration_test/에 생성되므로 이동할 대상이 없다 |
저널·박제 경계#
-
휘발:
.claude/e2e-journal/*.jsonl, *.md, screenshots/
— .gitignore
-
박제:
.claude/e2e-lock.json, .feature, *_steps.dart, K 클래스 — 커밋 대상
금지 사항#
- ❌ flutter-skill MCP 를 ④⑤ 단계에서 호출
- ❌ lock 된 시나리오 재탐색 허용
- ❌ 저널을 git 스테이지
- ❌ Pre-lock 검증 실패 우회
- ❌ 단계 건너뛰기 (explore 없이 draft 등)
-
❌
bdd_test_gen/co_test_gen/bdd_widget_test 등 코드 생성기로 Patrol 테스트를 만들려는 시도 —
scenarios/*_test.dart 는 항상 손으로 작성
- ❌ K 규약·TestDriver 규약 재정의 (원전은
cc-flutter/rules/bdd-test-patterns.md)
- rules/selector-policy.md — flutter-skill → K 매핑
- rules/feature-file-conventions.md —
.feature 저작 체크리스트
- rules/binding-gating.md —
ENABLE_FLUTTER_SKILL 게이팅
- skills/feature-test-bundle — unit + BDD(Patrol E2E) + E2E 3-레이어 스캐폴드