Skip to content

fix: v2 테스트 FE 오류 수정 - #46

Merged
jeonbinggu merged 2 commits into
developfrom
fix/test-v2-fe-bugs
Oct 7, 2026
Merged

jeonbinggu merged 2 commits into
developfrom
fix/test-v2-fe-bugs

Conversation

@jeonbinggu

@jeonbinggu jeonbinggu commented Oct 6, 2026 •

Copy link
Copy Markdown
Member

🔀 Pull Request Title

fix: next 탭 문자 오픈 리다이렉트 · 더블클릭 중복 쓰기 요청


🎞️ 주요 코드 설명

오픈 리다이렉트 (widgets/auth/safeNext.ts)

return next && /^\/(?![/\])[^\t\n\r]*$/.test(next) ? next : null;
  • 기존 정규식은 2번째 글자만 봤다. "/\t/example.com"은 통과하지만 브라우저 URL 파서가 탭·개행을 지워 //example.com(외부)이 된다
  • 로그인 뒤 이동과 "가입" 링크로 넘기는 next가 모두 이 함수를 거친다

더블클릭 중복 쓰기 (shared/api/client.ts)

export function apiFetch<T>(path: string, options: ApiFetchOptions = {}): Promise<T> {
  const method = options.method ?? "GET";
  if (method === "GET") return request<T>(path, options);
  const key = `${method} ${path} ${JSON.stringify(options.body ?? null)}`;
  let pending = inflightWrites.get(key);
  if (!pending) {
    pending = request<T>(path, options).finally(() => inflightWrites.delete(key));
    inflightWrites.set(key, pending);
  }
  return pending as Promise<T>;
}
  • 원인: disabled={isPending}은 다음 렌더에야 걸려서, 더블클릭의 두 번째 클릭이 그 전에 들어온다
  • 같은 패턴의 버튼이 14곳(승인·반려 · 프로젝트 생성 · 배정 · 초대 발급 · 레포 연결 …)이라 버튼마다 고치지 않고 모든 쓰기 요청이 지나가는 한 곳에서 막았다
  • 진행 중인 같은 요청(메서드·경로·본문)이 있으면 새로 보내지 않고 그 결과를 나눠 갖는다. 앞 요청이 끝난 뒤 다시 누르는 것은 막지 않는다(그건 서버 409가 판정)
  • GET은 그대로

검증 단계 순서 · "대기" 표기 (widgets/task-detail/TaskDetailView.tsx)

{EXPECTED_STAGES.map((stage) => {
  const v = verifications.data.find((x) => x.stage === stage);
  return v ? <VerificationRow key={v.id} v={v} /> : /* "대기" 행 */;
})}
{integration && <VerificationRow v={integration} />}
  • 원인: 보고된 단계는 정렬했지만 미보고 단계를 목록 뒤에 따로 붙여서, V4만 보고되면 V1A · V1B · V3 · V4 · V2 순서가 됐다
  • V1A → V1B → V3 → V2 → V4 순서로 한 번만 돌며 결과가 없으면 제자리에 "대기"(기존 "보고 전"). INTEGRATION은 결과가 왔을 때만 끝에
  • 결과 행은 VerificationRow로 분리 (모양 동일)

배정 · 해제 실패 뒤 재조회 (entities/project/api/projectMutations.ts · widgets/settings/SettingsView.tsx)

  • 원인: 실패 시 다시 읽는 코드가 PROJECT_STARTED · PROJECT_ALREADY_STARTED뿐이라, 경쟁 409 · 404 뒤 실시간 신호가 없으면 화면이 낡은 채로 남았다
  • STALE_CODES에 ROLE_ALREADY_ASSIGNED · AGENT_ALREADY_ASSIGNED · AGENT_IN_ANOTHER_PROJECT · MEMBER_NOT_FOUND 추가
  • 에이전트 후보 목록도 실패 시 다시 읽도록 onSuccess → onSettled

합류 안내 (widgets/connect-agent/ConnectAgentView.tsx)

  • ?joined=1로 들어오면 제목 위에 "{조직 이름}에 합류했습니다. 에이전트를 연결하세요." (토큰 brand-50 · brand-700)
  • 에이전트가 이미 있으면 /projects로 건너뛰는 기존 로직은 그대로

📌 PR 설명

이번 PR에서 어떤 작업을 했는지 요약해주세요.

  • AU-10: /login?next=%2F%09%2Fexample.com 로그인 → 수정 전 example.com 이동 / 수정 후 /projects, 가입 링크도 /signup으로 next를 버림
  • PN-15: 마지막 단계 "프로젝트 만들기" 실제 마우스 더블클릭 → 수정 전 프로젝트 2개 / 수정 후 POST 1번 · 프로젝트 1개
  • AP-10: 받은 편지함 "승인" 더블클릭 → 수정 전 POST 2번(200 + 409) / 수정 후 POST 1번, 에러 없음
  • TD-04 · TD-05: 검증 단계를 V1A → V1B → V3 → V2 → V4 순서로, 미보고 단계는 제자리에 "대기"
  • ST-14 · ST-15: 배정 경쟁 409 · 이미 해제된 에이전트 404 뒤 배정 목록 · 에이전트 후보 다시 읽기
  • CN-02: ?joined=1 진입 시 조직 합류 안내
  • pnpm format:check · pnpm lint · pnpm typecheck 통과
  • TD-04 · TD-05 · ST-14 · ST-15 · CN-02 브라우저 재확인 (다음 테스트 실행 때)

테스트 결과 전체는 노션 "테스트 결과 v2 — 로컬 실행 (2026-10-06)" · "테스트 결과 v2 — 2차 로컬 실행 (2026-10-07)"에 있다. 2차 FE 오류 중 ER-03(맵에 없는 코드 → 서버 영어 message 노출)은 우선순위가 낮아 이 PR에서 뺐다. BE 쪽 문제(이벤트 ORDER BY id가 text 별칭으로 정렬 · 프로젝트 생성 시 레포 점유 경쟁 · 팀원 태스크 필터 · 오프라인 판정 70초 · 브랜치 등록 신호 없음)는 이 PR 범위 밖이다


📷 스크린샷

검증 단계 목록 · 합류 안내 문구 — 추가 예정

🤖 Generated with Claude Code

- safeNext: 탭·개행이 있으면 거부 (URL 파서가 지워 "/\t/evil"이 "//evil"이 된다)
- apiFetch: 같은 쓰기 요청(메서드·경로·본문)이 진행 중이면 그 결과를 나눠 갖는다.
  disabled={isPending}은 다음 렌더에야 걸려 더블클릭을 못 막았다

Closes #45

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
frontend Ready Ready Preview Oct 7, 2026 3:33am UTC

- TD-04·05: 미보고 단계를 제자리(V3 → V2 → V4)에 대기로 표시, INTEGRATION은 결과가 있을 때 끝에
- ST-14·15: 배정·해제 경쟁 409/404 시 프로젝트·에이전트 목록 다시 읽기
- CN-02: ?joined=1 진입 시 조직 합류 안내

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jeonbinggu jeonbinggu changed the title fix: next 탭 문자 오픈 리다이렉트 · 더블클릭 중복 쓰기 요청 fix: v2 테스트 FE 오류 수정 Oct 7, 2026
@jeonbinggu
jeonbinggu merged commit 141cb57 into develop Oct 7, 2026
3 checks passed

This branch was successfully deployed

1 active deployment
Preview — 9ab37210 Deployed Oct 7, 2026 by vercel[bot]
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.

[BUG] 오픈 리다이렉트 · 더블클릭 중복 제출

1 participant