--fail-if-no-match
| 제약 | 거기에 매칭되는 파일 |
|---|---|
| 단계 순서 | PIPELINE_PHASES · 파이프라인 문서 |
| 단계별 할 일 · 쓸 수 있는 도구 | .claude/skills/*/SKILL.md |
| 산출물 이름 | docs/features/ARTIFACTS.md |
| 상태 · 계획 | docs/progress/*.jsonl |
| 다음 단계 결정 | .codex/hooks/lib/router.py · Stop hook |
| 역할 분리 | .claude/agents/implement-orchestrator.md |
| 완료 정의 | apps/server-e2e · apps/mobile-e2e |
| 반복 상한 | 재시도 3회 · MAX_STALE_REPEATS = 2 |
| 거짓 GREEN 차단 | --fail-if-no-match |
| 검증 분리 | e2e-verify · adb-verify · webview-verify |
---
name: implement-feature
allowed-tools: Read, Write, Edit, Glob,
Grep, Agent, Bash(pnpm *), Skill(deploy)
context: fork
agent: implement-orchestrator
---
### Step 1: Determine Feature Name
### Step 2: Check Document Existence
### Step 3: Handle Missing Documents
### Step 4: Spawn Orchestrator
| 산출물 | 만드는 곳 | 읽는 곳 |
|---|---|---|
| core-idea.md | /start | /clarify |
| data-model.md | /clarify | /define-pages · db-implement |
| page-map.md | /define-pages | /design-wireframes |
| architecture.md | /design-architecture | implement 에이전트 |
| test-scenarios.md | /write-test-scenarios | e2e-verify · adb-verify |
// docs/progress/auto-mode.json
{
"enabled": true,
"problem": "기프티콘 만료일을 자꾸 놓친다",
"preferences": { "kakao_login": false }
}
// 실제로는 한 줄
{
"ts": "2026-04-07T17:41:21+0900",
"iter": "initial",
"feature": "pushup-session",
"phase": "implement",
"agent": "implement-orchestrator",
"event": "impl_status",
"detail": { "status": "IN_PROGRESS" }
}
// 표시를 위해 ts · iter · feature · phase 생략
{"event":"static_test","detail":{"tool":"pnpm lint","result":"PASS","warnings":209}}
{"event":"static_test","detail":{"tool":"mobile tsc","result":"PASS"}}
{"event":"adb_result","detail":{"build":"dev","pass":2,"fail":0}}
{"event":"error_logged","detail":{"worker":"mobile-implement","error":"MediaPipe model asset path missing"}}
{"event":"impl_status","detail":{"status":"COMPLETED"}}
MAX_STALE_REPEATS = 2
for phase in PIPELINE_PHASES:
if phase not in completed:
return phase
pnpm --fail-if-no-match --filter ./apps/server-e2e e2e
pnpm --fail-if-no-match --filter ./apps/mobile-e2e e2e
# 워크스페이스 미매칭 → 무매칭 성공(false-GREEN)
pnpm --filter ./apps/server-e2e e2e
# 미매칭이면 실패로 처리
pnpm --fail-if-no-match --filter ./apps/server-e2e e2e
{"event":"error_logged","detail":{"error":"JSONL reported successful ADB
verification, but resumed device smoke still showed WAIT_POSE LM:0 DET:0,
so live landmark acquisition remains unverified."}}
| 한계 | 구현체 |
|---|---|
| 상태 없음 | JSONL 3파일 + /continue 재구성 |
| 계획 없음 | 11단계 명세 + router.py |
| 자기 참조 | 검증 Agent 분리 + 지울 수 없는 기록 |
| 오류 전파 | 반복 상한 + BLOCKED 표기 + 레이어 분류 |