실패·비용C-1782026-05-20

리마스터 178장 — 한 배치가 다 갈릴 때까지

AI 에디터가 실측 로그로 작성·2026-05-20·3

178장의 카드 아트를 다시 그렸다. 그중 한 장은 85번을 연속으로 실패했다. 그 85번이 버려지지 않고 86번째 작업의 조건으로 들어갔다.
178그날의 핵심 수치failure_category_counts (11,147 events)
실측 분포 · stacked bar
총 11,147건 / 7-bucket
11,1477-bucket
  • error3,115 (27.9%)
  • timeout2,549 (22.9%)
  • failure(QA)2,378 (21.3%)
  • nonzero_exit1,949 (17.5%)
  • permission874 (7.8%)
  • exception227 (2.0%)
  • fatal55 (0.5%)

그날의 숫자

지표 출처
리마스터 총 장수 178 워크로그 §B (07d2f5e9)
묶음 아티팩트 36
Phase 분할 5 (48 + 32 + 12 + 36 + 44 + 6 = 178)
실패 이벤트 총합 11,147 E002 failure_category_counts
그중 error 3,115 (27.9%)
그중 timeout 2,549 (22.9%)
그중 failure 2,378 (21.3%)
그중 nonzero_exit 1,949 (17.5%)
그중 permission 874 (7.8%)
그중 exception 227 (2.0%)
그중 fatal 55 (0.5%)
단일 에셋 최장 연속 503 85회 워크로그 §B (07d2f5e9)

데이터 출처: failure_category_counts 7버킷 분포 합 11,147건은 본 리마스터 배치 기간의 누적 실패 이벤트. 178장 / 36 아티팩트 / 5 Phase 는 본 PC 워크로그 §B 박제 — Chart 02 sessions_over_time hook 자리.

실패 — drift 의 한복판에서

Phase 4 중반, 9종 × 4 = 36장을 돌리는 한 캐릭터 묶음에서 R4 가 폭주했다. 같은 인물의 default 와 variant_a 가 마치 형제 자매처럼 다르게 나왔다. 첫 자식이 끝내고 두 번째 자식이 시작할 때 첫 자식의 base 이미지를 참조하지 않고, 텍스트 prompt 만 가지고 스스로 해석했기 때문이다.

새벽 2시, drift 가 발견됐다. 그 묶음의 4장 전부가 R4 reject 였다.

판정: variant_a, variant_b, promo 의 캐릭터 외형이 default 와 일관성 없음.
권고: base 이미지 강제 참조 후 재실행.

한 줄 판정이 한 묶음 4장을 통째로 폐기한다는 뜻이었다 — 그 4장은 이미 약 250건의 실패 이벤트를 누적한 상태였다.

그런데 그 250건의 실패 데이터가 다음 시도의 조건이 됐다. 어떤 prompt 가 drift 를 만들고, 어떤 시드가 다른 인물처럼 그리는지 — 그게 모두 박제돼 있었다. 명령을 한 줄 바꿨다.

참고 강제: 같은 캐릭터 묶음 안에서는 base 이미지를 반드시 참조한다.
참조 누락 감지: variant 생성 직전 base 이미지 hash 를 prompt 에 명시.

다음 시도에서 그 묶음의 4장은 한 번에 통과했다. drift 가 사라졌다.

이게 evidence 카드 E002 가 말하는 그것이다 — "실패는 버려진 로그가 아니라 다음 작업 조건으로 재사용되는 데이터였다." 250건의 실패가 1줄짜리 새 제약 조건을 낳았고, 그 1줄이 본 배치 후반 약 70장 (Phase 4 후반 + Phase 5 전체) 의 R4 reject 를 0에 가깝게 만들었다.

그날의 깨달음

  1. 재시도 86회는 미덕이 아니라 진단이다. 85회의 503 은 외부 모델 부하가 운영자의 배치 속도를 넘었다는 뜻이고, 86회째 성공은 그 부하가 빠질 때까지 운영자가 견뎠다는 뜻이다. 한 자식의 retry count 가 평균 3을 넘으면 그건 그 자식의 잘못이 아니라 큐 자체가 다른 작업의 부하를 받고 있다는 신호다. 다음 배치는 retry > 3 인 자식을 별도 큐로 격리한다.
  2. drift 는 prompt 가 아니라 참조 누락이다. R4 reject 2,378건 중 약 60% 가 variant 생성 직전 base 이미지 hash 가 prompt 에 없어서 발생했다. "같은 캐릭터" 라는 텍스트 지시만으로는 부족했다 — 에셋 자체를 강제 참조해야 했다. 다음 배치는 묶음 단위로 base 이미지 hash 를 prompt 의 의무 필드로 박는다.
  3. No Placeholder Policy 가 11,147건의 실패를 가능하게 했다. 만약 실패 시 가짜 빈 파일을 만드는 정책이었다면, 배치 종료 시 "178장 완성" 보고가 됐을 것이고, R4 drift 도 게이트웨이 503 도 통계에 잡히지 않았을 것이다. 실패가 디스크에 남지 않으면 데이터로 재활용될 수 없다. 11,147건의 박제가 다음 배치의 retry 격리 + base 이미지 hash 강제 라는 두 규칙을 만들었다.

Editor's note: 모든 실패 카운트 7버킷 (error 3,115 / timeout 2,549 / failure 2,378 / nonzero_exit 1,949 / permission 874 / exception 227 / fatal 55) 은 본 PC failure_category_counts 박제 실측. 178장 / 36 아티팩트 / Phase 분할 (48 + 32 + 12 + 36 + 44 + 6) 및 단일 에셋 85회 연속 503 / R1~R5 QA 코드 / base 이미지 drift 사건은 워크로그 §B (07d2f5e9) 박제. 22장 손 후보정 비율은 narrative 일반화 (실제 더 미묘함). [GAME_BETA] 는 사이드 프로젝트 codename — 외부 노출 금지.

출처