ISSUE AUTOMATION 문서 기반 시뮬레이션
자동 이슈 처리.
낮에 모은 오류를 밤사이 수정하고, 아침에 사람이 검토합니다. 수집부터 머지 동기화까지, 각 단계의 책임과 경계를 살펴보세요.
와이어프레임낮 → 밤 A절 → 밤 B절 → 아침
WIREFRAME야간 러너 구성 — 낮 → 밤 → 아침 · 각 열은 하루 중 한 단계, 위→아래가 실행 순서
러너·자동화 사람·라벨 계약 핵심 write 실패·중단·확인 공유 멱등 절차
낮 · 트리아지 (유입)
이슈만 만든다 — 코드는 안 짠다
이슈만 만든다 — 코드는 안 짠다
inbound · Sentry only
Sentry 미해결 → fe-sentry-triage 평일 18:23 무인
issueize · 등록 (write)
Anchor dedup 본문 첫 줄 · 있으면 closed여도 재생성 안 함
6항목 적격성 판정 미달 → 설계 (night-shift 미부착)
「작업 내용」 번호 순서 고정 1
안→밖 레이어 순 · 게이트·MR 항목 넣지 않음
안→밖 레이어 순 · 게이트·MR 항목 넣지 않음
label contract · 사람
할 일 + night-shift + cladue runner 1|2 2
레인은 runner:pick 균등 랜덤 · 같은 파일이면 같은 레인
레인은 runner:pick 균등 랜덤 · 같은 파일이면 같은 레인
Sentry 오류마다 Notion 페이지 1건 「시작 전」 + 메타 표 URL 필수
GitLab 이슈 큐 · 「할 일」
밤 A절 · 러너 · 레인 1개
루틴 2건(20:57 · 21:03) 병렬 · 큐는 한 번만 읽는다
루틴 2건(20:57 · 21:03) 병렬 · 큐는 한 번만 읽는다
A-0 레인 확정
--runner 1|2 > NIGHT_SHIFT_RUNNER > 단건 iid 3
레인도 iid도 없으면 멈춤 · 빈 큐여도 다른 레인 안 감
A-1 preflight (write 0회)
레인 락 (TTL 240분) + origin/develop fetch → runId · baseCommit
✗ VPN·락 실패 → FAILED · manifest 없이 종료
A-2 큐 스냅샷 · 1회 고정
night-shift ∧ 할 일 ∧ 레인 라벨 ∧ ¬(설계·사람게이트·차단)
High → Medium → Low → 없음 · 동순위 오래된 순
High → Medium → Low → 없음 · 동순위 오래된 순
✓ 루프 도중 큐를 다시 읽지 않는다 — 유한성 보장
A-3 이슈 루프 · 직렬 1건씩
이슈 #N 마다 4
a. 워크트리 .worktree/N-slug + 브랜치 fix/N-slug
b. 서브에이전트 1건 위임 (fresh context) → B절
c. 결과 JSON 누적
d. DONE·SKIPPED cleanup / BLOCKED 보존
e. 연속 2건 BLOCKED → 레인 중단 · PARTIAL → A-4
A-4 머지 완료분 동기화 · 락 해제 전
MR merged인 건만 → GitLab 완료 → Notion 완료 → Sentry resolve 5
A-5 manifest 기록 + --finish (락 해제)
밤 B절 · 이슈 1건 (서브에이전트)
cwd = 워크트리 · 브랜치 이미 존재 · 다음 이슈로 안 넘어감
cwd = 워크트리 · 브랜치 이미 존재 · 다음 이슈로 안 넘어감
B-1 2차 재검증 (write 전)
opened ∧ night-shift ∧ 할 일 ∧ 레인 라벨 ∧ ¬가드
원인 경로:심볼 grep · 선결 #N 미머지면 착수 안 함
✗ 하나라도 어긋나면 write 0회 SKIPPED
B-2 ~ B-4 착수 · 구현 · 게이트
B-2 issue:state N 진행중
B-3 「작업 내용」 번호 순서대로
domain → application → infrastructure → presentation
domain → application → infrastructure → presentation
B-4 fe-finish-pipeline 6
typecheck · lint · prettier — pass만 통과
typecheck · lint · prettier — pass만 통과
B-5 push · MR (진행중 → 리뷰)
base develop · target 최신 release-* · squash
본문 첫 줄 🌙 · Closes #N 필수 7
sentry면 추적 블록 3행
sentry면 추적 블록 3행
B-6 Notion 되돌림 (sentry 라벨만)
메타 표 URL로 페이지 식별 → 「작업 내역」 append → 상태 = MR
실패해도 MR 성공은 유지
실패해도 MR 성공은 유지
B-8 결과 JSON
DONESKIPPEDBLOCKED
부모(A-3)가 파싱하는 값
아침 · 사람 + 동기화 수습
러너는 MR까지 · 머지·배포·완료 판단은 사람
러너는 MR까지 · 머지·배포·완료 판단은 사람
08:33 session-intro 훅 · night-report
레인별 latest-run JSON 요약 — 처리 · skip · 차단 · MR · 잔여 큐
사람이 하는 것
「리뷰」 컬럼 MR 검토 → 머지 (Closes로 이슈 auto close)
「차단」 건: 코멘트 근거 읽고 보존된 워크트리에서 이어받기
잘못 등록된 이슈는 night-shift 떼기 · 레인 라벨 재배치
라벨은 아직 「리뷰」
Closes로 닫혀도 상태 라벨은 리뷰에 멈춘다 8
실측 11건 중 3건 방치 → 반영 단계가 따로 있다
실측 11건 중 3건 방치 → 반영 단계가 따로 있다
08:47 sentry-triage --sync (또는 다음 밤 A-4)
MR merged 확인 → ① GitLab 완료 → ② Notion 완료 → ③ Sentry resolved ✅
✓ 먼저 도달한 쪽이 종결 · 나머지는 skip (멱등)
3개 시스템 최종 상태
GitLab
완료
완료
Notion
완료
완료
Sentry
resolved
resolved
18:23
다음 밤 반복
다음 밤 반복
4평일 루틴수집 · 러너 2 · 동기화
2러너 레인분리된 큐 · 각각 직렬 처리
3상태 동기화GitLab · Notion · Sentry
0자동 머지최종 반영은 사람의 몫
오류 한 건이 지나가는 하루
흐름을 재생하면 작업의 책임과 세 시스템의 상태가 함께 바뀝니다. 문서의 정상 처리 경로를 보여 주는 예시입니다.
야간 처리 흐름TRIAGE → RUNNER → HUMAN
낮 · TRIAGE
서비스 오류를 실행 가능한 이슈로
Sentry 미해결 오류를 수집하고 중복을 확인합니다. Notion 페이지와 GitLab 이슈에 기대 동작·범위·원인을 기록합니다.
Sentry가 유일한 유입 원천 · Anchor로 중복 방지
01GitLab할 일
02Notion시작 전
03Sentryunresolved
01 / 07단계를 눌러 탐색할 수도 있습니다.
두 레인, 같은 실행 원칙
6분 간격으로 시작RUNNER 0120:57
cladue runner 1
지정된 라벨의 이슈만, 우선순위대로 한 건씩 처리합니다.
HighMediumLow
레인별 락 · 레인별 manifest · 다른 레인 착수 금지RUNNER 0221:03
cladue runner 2
지정된 라벨의 이슈만, 우선순위대로 한 건씩 처리합니다.
HighMediumLow
레인별 락 · 레인별 manifest · 다른 레인 착수 금지연속 두 건이 BLOCKED이면 해당 레인을 PARTIAL로 종료합니다. 실패한 워크트리는 아침에 사람이 이어받을 수 있도록 보존합니다.