Skip to content

feat(split): 한 화면 좌우 2분할 — 크루 DM 옆에 다른 크루 DM·기억 문서를 나란히(?side=) - #294

Merged
beyondworks merged 3 commits into
mainfrom
feat/split-pane
Aug 23, 2026
Merged

feat(split): 한 화면 좌우 2분할 — 크루 DM 옆에 다른 크루 DM·기억 문서를 나란히(?side=)#294
beyondworks merged 3 commits into
mainfrom
feat/split-pane

Conversation

@beyondworks

Copy link
Copy Markdown
Owner

목적

크루끼리 양방향 대화와 업무 분배를 한 화면에서 보며 하기 위해, 크루 DM 옆에 다른 크루 DM 또는 기억 문서를 나란히 연다.

설계

  • 상태는 URL 쿼리 ?side=<spec> 하나. spec = crew:<slug> | doc:<rel>. 전역 상태·컨텍스트 없음.
  • 순수 모듈 app/c/[ws]/split.mjsparseSide / withSide(기존 쿼리·해시 보존) / sideParam.
  • layout.jsx: useSearchParams(Suspense 경계)로 side를 읽어 <main class="content"> 옆에 <aside class="split-pane">. 폭 = localStorage argo-split-w(기본 480, 최소 360, 최대 60vw), 왼쪽 가장자리 드래그 손잡이. 900px 미만은 CSS로 숨김. 사이드바 내부 Link는 전부 withSide를 통과 → 주 화면을 옮겨도 패널 유지. 닫기 = side 제거(router.replace).
  • split-pane.jsx: 패널 헤더(제목·전체 화면으로·닫기) + crew:<CrewChat embedded />, doc:DocPane(vault API → Markdown, "기억에서 열기" = /vault?doc=<rel>).
  • CrewChat embedded prop: topbar 포털 대신 인라인 컨트롤(역할·세션 칩·카드·새 대화), 주 화면 라우팅 배제(아래 목록), 세션 레일 숨김, 초안/대기열 localStorage 키는 그대로.
  • 진입점 3곳: ① 사이드바 크루 행 hover "옆에 열기"(cmd/ctrl+클릭 동일, 지금 보는 크루는 비활성) ② 기억 탐색기 문서 행 "옆에 열기" ③ 크루 DM topbar "옆에 열기 ▾" 크루 드롭다운.
  • i18n split.* ko/en 등록. 세션·인증·API 변경 없음.

CrewChat에서 embedded일 때 달라지는 router 호출

위치 원래 embedded
/ 커맨더 memory·room·deck (router.push) 주 화면 이동 명령 자체를 목록에서 제외
카드 패널 onFired (router.push('/c/ws')) 데크로 이동 onClose()로 패널만 닫음
topbar 포털 setSlotEl 포털 생략(인라인 렌더)
신규 SideOpenMenu.onPick (router.replace(withSide(...))) 주 화면 전용(패널 안에선 렌더 안 됨)

검증

  • node --check app/c/[ws]/split.mjs 통과, test/split.test.mjs 5건(기존 쿼리 보존·잘못된 spec null·한글 slug 왕복).
  • npm test: 921 tests / pass 916 / fail 0 / skipped 5, exit 0.
  • npx next build 성공(경고 없음).
  • 격리 QA 서버(ARGO_ROOT=/private/tmp/claude-503/argo-split-qa, :3232, Supabase env 비움)에서 creator 프리셋 회사 + 노트 1건 생성 후 Aside 브라우저(1440px)로 실측:
    • 크루 A 주 화면 + 크루 B 패널 / 크루 A + 기억 문서 패널 / 패널 닫은 뒤 / 라이트·다크 / 주 화면을 데크로 이동해도 패널(입력 중 텍스트 포함) 유지 — 스크린샷 artifacts/split-*.png(워크트리 로컬, 미커밋).
    • 패널 안 CrewChat에 입력 → 전송 버튼 활성, 주 화면 URL은 ?side= 외 불변, 주 화면 입력창은 빈 상태 유지.
    • 진입점 3곳 모두 클릭으로 ?side=crew:doyun-researcher / ?side=doc:notes/….md 반영 확인. 지금 보는 크루의 사이드바 버튼 disabled 확인.

미검증

  • 드래그 폭 조절은 코드·CSS만(마우스 드래그 실측 없음).
  • 러너 연결 없는 환경이라 패널 안 실제 턴 전송·완료는 미실측(전송 버튼 활성까지).
  • Tauri 웹뷰·윈도우·900px 미만 뷰포트(CSS 미디어 쿼리만) 미실측.
  • 같은 크루를 주 화면·패널에 동시에 여는 경우의 상태 충돌(설계상 허용, 버튼만 비활성).

🤖 Generated with Claude Code

beyondworks and others added 3 commits August 23, 2026 11:41
…arseSide·withSide·sideParam) + 테스트

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…, 드래그 폭 조절(localStorage argo-split-w), 사이드바 링크 side 유지, 크루 행 '옆에 열기'

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…입점 — 크루 DM 상단 '옆에 열기 ▾' 크루 드롭다운, 기억 탐색기 문서 행 '옆에 열기'

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@beyondworks
beyondworks merged commit fbf892a into main Aug 23, 2026
2 checks passed
@beyondworks
beyondworks deleted the feat/split-pane branch August 23, 2026 02:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant