Skip to content

로비에서 /pr 을 부르면 작업 워크트리를 골라 진입한다 - #60

Open
m-a-king wants to merge 2 commits into
mainfrom
feat/56-pr-lobby-dispatch
Open

로비에서 /pr 을 부르면 작업 워크트리를 골라 진입한다#60
m-a-king wants to merge 2 commits into
mainfrom
feat/56-pr-lobby-dispatch

Conversation

@m-a-king

@m-a-king m-a-king commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Situation

  • 워크스페이스 루트(piki/)는 repo 여럿을 자식으로 둔 세션 시작 자리일 뿐 어느 repo 에도 서 있지 않은데, 루트도 git repo 라 /pr 이 이걸 소비 repo 와 구분하지 못한다.
  • 0-A 가드는 로비를 못 걸러낸다. 루트 브랜치(workspace)가 base 후보와 달라 "작업 브랜치" 로 통과하고, 아무 repo 도 아닌 곳에서 create 모드까지 간다. 지금은 루트에 remote 가 없어 그 앞의 git fetch 가 먼저 터지는데, 안내가 "네트워크 확인" 이라 진짜 원인을 가린다.

Task

  • 로비에서 /pr 을 부르면 어느 repo 의 어느 워크트리에서 이어갈지 먼저 고르게 하고, 그 워크트리로 진입한 뒤 정상 경로를 타게 한다.
  • 후보를 모으는 문제가 걸린다. git worktree list 는 repo 하나만 보므로 로비에서는 자식 repo 를 가로지르는 열거가 따로 필요하다.

Action

설계

  • /pr 0단계 맨 앞에 로비 판별(0-A-0)을 뒀다. 판별은 "toplevel 바로 밑에 origin 이 TeamPiKi/* 인 repo 가 있는가" 로 한다. 루트 자신의 origin 유무로 보면 아직 remote 를 안 붙인 소비 repo 와 구분되지 않는다.
  • 로비면 후보를 물어 고르게 하고, EnterWorktree 로 진입한 뒤 0단계를 처음부터 다시 탄다. 이때는 cwd 가 워크트리라 판별이 그냥 통과한다. 후보가 없으면 올릴 작업이 없다는 뜻이라 멈춘다.
  • 다른 세션이 이미 열어 둔 워크트리는 막지 않고 표시만 한다. 아직 안 열린 후보를 앞에 두고, 열린 후보는 라벨에 그 사실을 붙여 뒤에 나열한다. 동시 편집 위험을 알리되 고를지는 사용자가 정한다.

열거 스크립트

  • claude/scripts/piki-worktrees.sh 를 더하고 홈(~/.claude/scripts)에 설치한다. find-session.sh 와 같은 이유다. 로비든 어느 repo 세션이든 같은 한 벌이어야 한다.

  • 자식 repo 를 돌 때 git common dir 로 중복을 제거한다. 형제 폴더 워크트리(piki/extractor-fetch-bound)도 자식으로 잡혀 같은 repo 를 여러 번 세기 때문이다. repo 이름도 common dir 의 부모에서 뽑는다. 형제 폴더의 basename 은 repo 가 아니라 작업 이름이다.

  • 후보 판정

    대상 후보인가
    base 브랜치(origin/dev, 없으면 repo default, 없으면 main) 워크트리 아니오 올릴 작업 브랜치가 아니다
    메인 체크아웃 아니오 로비에서 EnterWorktree path= 로 진입할 수 없다 (루트에 등록된 워크트리가 아니라며 거부된다)
    detached HEAD 워크트리 아니오 올릴 브랜치가 없다
    그 밖의 linked 워크트리
  • 세션 열림 표시는 ~/.claude/sessions/*.json 의 cwd 와 대조하되 pid 생존까지 본다. 레지스트리에 죽은 세션 파일이 남아 멀쩡한 후보를 가리기 때문이다.

  • base 는 gh repo view 없이 로컬 ref 로만 근사한다. 열거는 선택지를 띄우기 전에 즉답해야 해서 네트워크를 타지 않는다.

Result

  • 검증은 실제 워크스페이스와 합성 워크스페이스 양쪽으로 했다. 실제 워크스페이스에서는 후보 13건이 나왔고, 세션 open 표시 4건이 라이브 pid 실측과 정확히 일치했다. extractor 는 자식으로 3개 폴더가 잡히지만 중복 없이 워크트리 한 벌만 나온다.
  • 합성 워크스페이스로 골라내기 네 갈래(base 워크트리, 메인 체크아웃, detached, 형제 폴더 워크트리)와 base 우선순위 3단, 세션 마킹의 죽은 pid / 깨진 json / 레지스트리 부재를 각각 확인했다.
  • 로비가 아닌 자리(소비 repo, 그 하위 디렉토리, git repo 아닌 곳)와 후보가 없는 워크스페이스에서는 출력 없이 정상 종료한다. 로비 판별 블록도 5개 컨텍스트에서 실측했다.
  • 메인 체크아웃 제외는 대가가 있다. 메인 체크아웃이 feature 브랜치 위에 있는 repo 는 그 작업이 후보에 안 뜬다. 워크트리로 분리해 작업한다는 기존 규약을 전제로 한 선택이다.
  • 후속: SLUG 를 repo + 브랜치로 넓히는 변경은 이 PR 에 넣지 않았다. 로비 세션이 repo 를 오갈 때 브랜치명만으로는 본문 임시파일 격리가 깨지는 문제라 별도로 올린다.

연관 이슈

워크스페이스 루트(piki/)는 repo 여럿을 자식으로 둔 세션 시작 자리일 뿐 어느
repo 에도 서 있지 않은데, 루트도 git repo 라 /pr 0-A 가드가 이걸 못 걸러낸다.
루트 브랜치(workspace)가 base 후보와 달라 "작업 브랜치" 로 통과해, 아무 repo 도
아닌 곳에서 create 모드까지 간다.

0단계 맨 앞에 로비 판별(0-A-0)을 두고, 로비면 자식 repo 를 가로질러 모은 후보
중에서 작업 워크트리를 고르게 한 뒤 EnterWorktree 로 진입해 0단계를 다시 탄다.
후보 열거는 홈에 설치되는 piki-worktrees.sh 가 맡는다 - git worktree list 는
repo 하나만 보기 때문이다.

관련 #56
@m-a-king m-a-king added the feat 외부 가시적 새 기능 label Aug 25, 2026
@m-a-king m-a-king self-assigned this Aug 25, 2026
@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9b196986-9516-4850-9886-3fc1b3f92965


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

주석은 코드가 이미 말하는 것을 뺐다. 남긴 다섯 줄은 코드만 봐서는 안 보이는
사실이다 - 세션 레지스트리에 죽은 파일이 남는다는 것, 형제 폴더 워크트리가
자식으로도 잡혀 repo 가 두 번 걸린다는 것, 그때 basename 이 repo 가 아니라는 것,
base 를 로컬 ref 로만 근사하는 이유, porcelain 첫 레코드를 건너뛰는 이유.

세션이 열린 후보를 선택지에서 빼고 전부 열렸으면 멈추던 것을 경고 표시로 바꿨다.
동시 편집 위험은 알리되 멈출지 말지는 사용자가 정하는 편이 낫다. free 후보를
앞에 두고, 열린 후보는 라벨에 표시해 뒤에 나열한다.

스크립트는 주석만 바뀌어 동작이 같다 (주석 제외 코드 동일, 실행 출력 동일 확인).

관련 #56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat 외부 가시적 새 기능

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant