Skip to content

v 1.13.0 — 비-git dispatch 자식 회수 복구 + 설계 문서는 개인 머신으로

Choose a tag to compare

@sshworld sshworld released this 14 Aug 07:52
· 28 commits to main since this release

v1.13.0 — 비-git dispatch 자식 회수 복구 + 설계 문서는 개인 머신으로

비-git 디렉토리에서 자식 4개가 전부 정상 완료했는데 부모가 받은 완료 통지가 0건이었다. 부모는 자식이 끝난 줄 모르고 턴을 종료했다.

🐛 Fix

  • done-marker 가 사실상 한 경로에서만 기록되던 문제. hooks/notify-slice-done.sh 의 조기 종료가 4중이었다 — 비-cmux / 비-git / 일반 체크아웃(GIT_DIR==GIT_COMMON) / TOPLEVEL 이 */.worktrees/* 아님. 전 경로 exit 0 이라 실패가 로그에도 안 남았다. marker 부재가 reap fast-path · reap-on-stop 자동 통지 · (폴백인) wait-idle 을 동시에 죽였다 — 벨트와 멜빵이 같은 못에 걸려 있었다.
  • scripts/cbp-marker-path.sh 신설 (공용 리졸버). writer 1곳과 reader 4곳(cmux-pane.sh ×3, reap-on-stop.sh)이 각자 marker 경로를 계산해서, 한 곳만 고치면 writer/reader 가 갈라졌다. 우선순위: CBP_MARKER_DIR > git-common-dir > ~/.cache/cbp/marker-<workspace>. 비-git 폴백 규칙은 enforce-cmux-dispatch.sh 가 이미 쓰던 것을 재사용했다.
  • wait-idle 이 살아있는 Claude TUI 상대로 원리상 반환하지 않던 문제. 화면 원본 sha 비교라 경과시간·비용·스피너가 매초 바뀌어 idle 에 도달하지 못했다(실측 timeout (540s), 자식이 이미 파일을 쓴 뒤). 해시 전 변동 라인을 마스킹한다 — 단 맨 초 단위(42s)는 상태줄에서만 지운다. 전역으로 지우면 본문의 진행 변화까지 삼켜 "아직 일하는 중인데 idle" 로 조용히 오판한다.
  • 비-git dispatch 하드 실패. git worktree add 실패로 종료했고 --worktree 우회 안내도 없었다. 격리는 목적이 아니라 슬라이스간 파일 충돌 방지 수단이고 그 충돌은 plan 의 Slice File Map 이 관리하므로, 경고 1줄 후 cwd 로 진행한다. git repo 경로는 무변경.
  • 게이트 escape 안내가 코드와 불일치. 비-git 폴백의 -<sanitized workspace> 접미사가 빠진 경로를 안내해서, 그대로 touch 하면 훅이 절대 보지 않는 파일이 생기고 재시도해도 같은 자리에서 다시 막혔다. 안내가 훅이 실제로 소비하는 변수를 그대로 출력하도록 단일 출처화.
  • read-screen → capture. read-screen 은 cmux CLI 명령이고 cmux-pane.sh 의 대응은 capture 다. 안내대로 하면 실패했다.
  • 비-git 에서 detached HEAD 오진단. marker_path() 안의 die 가 항상 command substitution 에서 실행돼 서브셸만 죽였고, 본체가 계속 진행해 사실과 다른 진단을 냈다. 판정을 do_start 진입부로 옮겨 실제로 종료되게 했다.
  • launch-time 사망의 원인 확정 (한 달 미해결). cmux new-pane 호출이 stderr 를 버려서, 실제 에러 not_found: Workspace not found 가 "PTY 미기동(not a terminal)" 이라는 엉뚱한 메시지로 나타났다. 세션이 자기 workspace 보다 오래 살아남으면(데몬 재시작·재호스팅) CMUX_WORKSPACE_ID 가 stale 이 된다. stderr 보존 + stale 선검사 + 폴백 안내를 추가했다. 기존 가설("surface 는 생기나 terminal 미attach")은 틀렸다 — surface 는 애초에 만들어지지 않았다.

♻️ Refactor

  • 설계 문서 기본 경로를 ~/.claude/design/<repo>/ 로. v1.10.0 은 repo docs/design/ 에 두고 "인수인계·이력서 자산" 으로 규정했는데, 그 프레이밍은 모델이 얹은 것이고 사용자가 말한 "영속" 은 개인 머신 영속이었다. 이 저장소는 공개라 커밋하면 개인 작업 노트가 그대로 공개되고, 팀 저장소라면 타인에게 읽기·유지를 강요한다. CBP_DESIGN_DIR override 는 유지 — 팀과 공유할 문서만 repo 안 경로를 명시한다. 커밋돼 있던 docs/design/plan-presentation.md 는 제거했다.

📝 Docs

  • dispatch 후 감시를 의무로 명시. 통지 체인은 조용히 실패할 수 있다(실측 0건). 감시 루프를 걸지 않은 채 턴을 종료하지 말 것.
  • 설계 문서는 작성 직후 open 으로 사용자 화면에 띄운다 — 못 본 상태의 승인은 승인이 아니다.

계약 변경: 일반 체크아웃과 .worktrees/ 밖 worktree 에서도 이제 통지·marker 가 기록된다. 구계약을 검사하던 테스트 2건을 새 계약으로 갱신했다.

테스트: 91개 전체 통과 (신규 27항목). 설계 문서의 재현 절차를 기준선으로 실행해 4단계 전부 증상 소멸을 확인했다.

업데이트: /plugin update sshworld