Skip to content

fix(ui): replace internal jargon with action-guiding customer copy - #1472

Open
seonghobae wants to merge 4 commits into
developfrom
fix/ui-copy-action-language
Open

fix(ui): replace internal jargon with action-guiding customer copy#1472
seonghobae wants to merge 4 commits into
developfrom
fix/ui-copy-action-language

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

No linked issue.

1) PR 제목 (Title)

fix(ui): replace internal jargon with action-guiding customer copy

2) 목적 (Purpose)

제품 오너의 카피 규칙 2가지를 워크스페이스 프런트엔드 전역에 적용합니다.

  1. 고객 화면에서 내부 구현 경계를 서술하지 않는다 — 서명 세션(signed session) 메커니즘, 커넥터 설정 화면 밖의 CalDAV/WebDAV 프로토콜 명칭, ETag/If-Match/intent 내부 용어, 백엔드 registry/schema/KG 전문용어, 원본 provider/provenance raw 값을 그대로 노출하지 않습니다.
  2. 모든 설명 문구는 고객의 다음 행동을 안내한다 — 빈 상태·오류·로딩 문구가 맨 "준비 중" 자리표시나 미출시 자동 재시도 약속 대신, 화면에서 실제로 가능한 가장 가까운 행동을 이름으로 알려줍니다.

3) 주요 변경 사항 (Key Changes)

  • 15개 화면에서 약 100개 문자열 교정: 내부 전문용어(CalDAV/CardDAV/WebDAV 프로토콜명, ETag/If-Match, intent, 서명 세션, registry, source-linked 등)를 고객 개념 어휘(캘린더 연결 원본, 문서 저장소, 변경 충돌 검사, 로그인 사용자 등)로 치환.
  • 빈/오류/로딩 상태를 행동 유도형으로 재작성: 예) 도구 화면 빈 상태 → "새로고침을 눌러 최신 목록을 확인하세요", 캘린더 반영 원본 없음 → "[설정에서 계정 연결하기] 링크", 충돌 감지 → "최신 내용을 확인한 뒤 다시 점검하세요". 미출시 기능에 대한 자동 재시도 약속 문구는 제거하고, 실패 시 사용자가 취할 수 있는 실제 행동만 안내합니다.
  • 버튼·배지 라벨을 동작 중심으로 정리: "새 일정 intent 점검" → "새 일정 반영 점검", "ETag 실행 요청" → "실제 반영 실행 요청", "Tool Registry" → "도구 현황" 등.
  • 9개 테스트 파일을 새 카피 기준으로 갱신: 새 문자열을 회귀 방지 단정(assertion)으로 잠그고, 더 이상 유효하지 않은 이전 전문용어 카피 기대치는 제거했습니다. 허위 기능 약속(미구현 플로우를 있다고 서술하는 문구)은 만들지 않았습니다.
  • 로직·데이터 흐름·API 호출은 변경하지 않았습니다(문자열·aria-label 수준 교체).

4) 변경 범위 / 영향도 (Scope / Impacted Areas)

  • 영향 범위: 프런트엔드 UI 문자열과 관련 테스트만 해당. 렌더링 조건·상태 머신·API 계약·백엔드 코드는 변경 없음. 24개 파일(+262 / −260).
  • 범위 제외(의도적 보존):
    • Security 거버넌스 화면의 RBAC/ABAC 용어는 도메인 표준 용어이므로 정책 엔진 문맥에서는 유지(화면 헤더 등 고객 직접 노출 라벨만 고객 어휘로 교체).
    • 커넥터 설정 화면(Settings의 계정 연결 영역)은 CalDAV/WebDAV를 제품 개념으로 다루므로 프로토콜명 유지.
    • 렌더링되지 않는 API 페이로드 문자열(payload key, enum 값 등)은 제외.
  • 검증 (사용자 제공 결과 기재):
    • corepack pnpm@11.5.3 --dir frontend install --frozen-lockfile → ok
    • corepack pnpm@11.5.3 --dir frontend test --runInBand → Test Files 51 passed, Tests 437 passed
    • ESLint on all 24 changed files → 0 errors, 0 warnings
  • UI/UX 표준 준수 요약: 본 변경은 화면 배치·레이아웃·반응형 분기(PC ≥1024 / Tablet 768–1024 / Phone <768)·헤더 고정·모바일 드로어·푸터 저작권 형식에 영향을 주지 않는 문자열 교체입니다. 버튼 명명이 "행동 + 대상" 순서로 정돈되어 버튼 명명/순서 기준과 부합하며, 빈/오류/로딩 상태는 기존 role="status" · aria-live="polite" 구조를 그대로 유지합니다. Phone 스크롤 힌트·모달 opacity 등 구조 요건에는 편차 없음. 시각 검증(스크린샷/E2E)은 이 PR 범위에서 수행하지 않았으며, 문자열 단위 회귀는 갱신된 9개 테스트 파일이 담당합니다.

5) 변경 사항 표 (Change Table)

Component Change Notes
frontend/src/components/WorkspaceHome.tsx Today 대시보드 통계 라벨 교정: CalDAV/CardDAV/WebDAV 원본 → 캘린더·연락처·문서 저장소 연결 원본, source-linked/WebDAV 폴더 diffText → 메일 연동/프로젝트 폴더, 충돌 토큰 라벨 → 변경 충돌 검사 상태 Intent: 홈 첫 화면에서 프로토콜·내부 토큰 용어를 걷어냄. Why: 최초 진입 화면일수록 내부 경계 노출이 고객 신뢰를 해치므로, 상태값이 무엇을 의미하는지와 다음 행동(원본 확인/반영 가능)을 함께 보여줌
frontend/src/app/tools/page.tsx "Tool Registry"→"도구 현황", "파라미터 계약"→"입력값 필요 도구", 로딩 문구에 대기 안내 추가, 빈 상태를 새로고침 행동 유도로 재작성 Intent: 도구 실행 콘솔의 계약/레지스트리 전문용어 제거. Why: 빈 상태에서 고객이 할 수 있는 유일한 행동(새로고침)을 명명해야 막힌 화면이 되지 않음
frontend/src/components/AIHubLayout.tsx AI Hub 탭·안내 카피에서 내부 모델/파이프라인 전문용어를 고객 행동 중심 문구로 교체 Intent: AI Hub가 분석 결과 소비 화면임을 유지. Why: 탐색·설명 문구는 구현 계층이 아닌 고객 과업 중심이어야 함
frontend/src/components/SearchLayout.tsx Context Search 결과/빈 상태 카피를 행동 유도형으로 교정 Intent: 검색 실패·빈 결과 시 다음 시도 방법을 안내. Why: "준비 중"류 자리표시는 상태를 설명할 뿐 다음 행동을 주지 않음
frontend/src/components/ProjectsLayout.tsx 프로젝트 원본/폴더 관련 라벨을 WebDAV 전문용어 대신 고객 개념으로 교체 Intent: 프로젝트 화면에서 저장 프로토콜을 노출하지 않음. Why: 원본이 어디서 왔는지는 설정 화면에서만 다루는 것이 카피 규칙
frontend/src/components/TasksLayout.tsx 작업 보드 안내·빈 상태 문구를 다음 행동 중심으로 재작성 Intent: 작업 없음/오류 상태에서 생성·연결 등 실제 행동을 지시. Why: bare placeholder 제거 원칙 적용
frontend/src/components/SecurityLayout.tsx 서명 세션→로그인 사용자/계정 확인, provider secret→인증정보, connector 관측→연동 상태 관측, 헤더 "RBAC / ABAC"→"접근 권한" 등 거버넌스 라벨 교정 Intent: 보안 거버넌스 화면도 고객 어휘로 읽히게 함. Why: RBAC/ABAC 같은 도메인 표준은 정책 문맥에 유지하되 고객이 직접 읽는 라벨·오류·빈 상태는 행동(다시 시도 등)을 안내하도록 함
frontend/src/components/SettingsLayout.tsx ETag readiness→변경 충돌 검사 상태, writeback readiness→쓰기 가능/읽기 전용, WebDAV 저장소→문서 저장소, 알림 정책 카피에서 CalDAV writeback/ETag/connector heartbeat 전문용어 제거 Intent: 설정은 커넥터 개념을 다루지만 ETag·intent 같은 구현 세부는 여전히 내부 정보. Why: 계정 연결·알림 화면 고객에게는 "무엇을 하면 무엇이 된다"가 필요
frontend/src/components/calendar/CalendarWritebackSection.tsx 반영 의도/intent/If-Match 문구 → 반영 점검·실제 반영 실행, 충돌·auth·error 상태를 재점검/재로그인 등 행동 안내로 재작성, 원본 없음 상태에 설정 연결 링크 추가 Intent: 일정 반영 3단계(점검→변경 확인→실행)를 고객 언어로 노출. Why: 실패 사유(충돌·로그인·오류)마다 고객이 취할 다음 행동을 이름으로 제공해야 진행이 막히지 않음
frontend/src/components/calendar/CalendarDetailView.tsx, frontend/src/components/calendar/CalendarCoordinationView.tsx, frontend/src/components/calendar/helpers.ts 일정 상세·조율 화면 및 원본/기능 라벨 helper를 고객 개념 어휘로 교정 Intent: 캘린더 전역에서 동일 원본 라벨 체계 유지. Why: helper 한 곳의 용어가 여러 화면으로 퍼지므로 상수 레벨에서 정리해야 일관성 유지
frontend/src/components/data-layout/DocumentRepositoryTab.tsx, frontend/src/components/data-layout/QualityCheckTab.tsx, frontend/src/components/data-layout/utils.ts Data 문서 저장소·품질 탭의 ingestion/embedding/registry 전문용어를 고객 행동 문구로 교체 Intent: 데이터 현황 화면을 파이프라인 해설이 아닌 다음 작업 안내로 전환. Why: 공유 util의 라벨 함수가 여러 탭에 재사용되므로 원천에서 교정
frontend/src/app/{ai-hub,calendar,data,projects,search,security,tasks}/page.test.tsx, frontend/src/components/SettingsLayout.test.tsx, frontend/src/components/WorkspaceHome.dashboard.test.tsx (9 files) 새 고객 카피를 assertion으로 갱신, 구 전문용어 기대치 제거 Intent: 카피 규칙을 테스트 계약으로 고정. Why: 향후 회귀 시 어떤 문자열이 규칙 위반인지 즉시 드러나도록 함

6) Sequence Diagram(s)

동작 흐름(렌더 조건·API 호출)은 변경되지 않았으며, 각 상태가 렌더링하는 문자열만 교체되었습니다. 참고로 교체된 고객 대면 상태 흐름은 아래와 같습니다.

sequenceDiagram
    participant C as 고객
    participant S as 워크스페이스 화면
    participant A as 백엔드 API

    C->>S: 화면 진입
    S->>A: 데이터 조회 (기존 경로, 변경 없음)
    alt 로딩
        S-->>C: 조회 중 안내 + 대기 안내 문구
    else 빈 상태
        S-->>C: "지금 표시할 항목이 없습니다" + 가장 가까운 행동 (예: 설정에서 계정 연결하기 / 새로고침)
    else 오류
        S-->>C: 실패 사실 + 다음 행동 (잠시 후 다시 시도 / 다시 로그인)
    else 충돌 (일정 반영)
        S-->>C: 덮어쓰지 않았음을 알림 + "최신 내용 확인 후 다시 점검" 안내
    else 성공
        S-->>C: 반영 결과 요약 (기존 구조 유지)
    end
Loading

Open in Devin Review

Summary by CodeRabbit

  • UI Updates

    • Refined Korean terminology across AI Hub, calendar, projects, data, security, tasks, tools, settings, and workspace screens.
    • Replaced protocol-specific wording with clearer descriptions of connected accounts, project folders, document repositories, and source evidence.
    • Improved calendar update messaging to clarify conflict checks, execution requests, results, and authentication states.
    • Updated task and knowledge-note actions and statuses for clearer preparation, saving, and completion guidance.
    • AI answers now display a consistent source-verification label without exposing backend provenance details.
  • Tests

    • Updated UI tests to reflect the revised labels, statuses, error messages, and empty-state guidance.

@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

Next included review available in 1 minute.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 6c61d649-d33e-4f10-913e-2cc63bf89fec

📥 Commits

Reviewing files that changed from the base of the PR and between 846501d and d396ac4.

📒 Files selected for processing (13)
  • frontend/scripts/full-product-ui-smoke.mjs
  • frontend/src/app/data/page.test.tsx
  • frontend/src/app/projects/page.test.tsx
  • frontend/src/app/tasks/page.test.tsx
  • frontend/src/components/DataLayout.tsx
  • frontend/src/components/ProjectsLayout.tsx
  • frontend/src/components/TasksLayout.tsx
  • frontend/src/components/WorkspaceHome.dashboard.test.tsx
  • frontend/src/components/WorkspaceHome.tsx
  • frontend/src/components/calendar/CalendarWritebackSection.tsx
  • frontend/src/components/data-layout/DocumentRepositoryTab.tsx
  • frontend/src/components/data-layout/types.ts
  • frontend/src/components/data-layout/utils.ts
📝 Walkthrough

Walkthrough

The PR aligns frontend Korean UI copy and test expectations across source terminology, account scope, evidence, conflict checks, writeback, document repositories, tasks, settings, and tools. It does not change public entities, control flow, or data handling.

Changes

Frontend terminology alignment

Layer / File(s) Summary
AI and tools terminology
frontend/src/app/ai-hub/page.test.tsx, frontend/src/app/search/page.test.tsx, frontend/src/app/tools/page.tsx, frontend/src/components/AIHubLayout.tsx, frontend/src/components/SearchLayout.tsx
AI Hub, search provenance, and tools status messages use revised wording.
Calendar coordination and writeback copy
frontend/src/app/calendar/page.test.tsx, frontend/src/components/calendar/*
Calendar account selection, conflict checks, writeback actions, execution states, and coordination messages use revised terminology.
Document repository and data actions
frontend/src/app/data/page.test.tsx, frontend/src/components/data-layout/*
Document actions, repository review, conflict handling, duplicate-mail review, and readiness labels use revised wording.
Projects and workspace terminology
frontend/src/app/projects/page.test.tsx, frontend/src/components/ProjectsLayout.tsx, frontend/src/components/WorkspaceHome*
Project folders, paragraph sources, execution items, workspace scope, and dashboard statuses use revised terminology.
Security and settings terminology
frontend/src/app/security/page.test.tsx, frontend/src/components/SecurityLayout.tsx, frontend/src/components/SettingsLayout*
Security resources, account scope, credentials, activity records, readiness states, and settings details use revised wording.
Task board and knowledge-note terminology
frontend/src/app/tasks/page.test.tsx, frontend/src/components/TasksLayout.tsx
Task-board labels, knowledge-note actions, save states, ownership, and authentication messages use revised terminology.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related PRs

  • ContextualWisdomLab/naruon#384: Updated UI copy in overlapping frontend components; this PR aligns tests and remaining displayed text with that terminology.
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the primary change: replacing internal UI jargon with customer-facing, action-guiding copy.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/ui-copy-action-language

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.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Open in Devin Review


function getKnowledgeTargetLabel(intent: KnowledgeMaterializationIntent) {
return intent.target_label || intent.source_id ? 'WebDAV/Notes 의도 준비' : '대상 원본 확인 필요';
return intent.target_label || intent.source_id ? '내 문서 노트로 저장 준비 완료' : '저장 위치 확인 필요';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: Ternary precedence in label helper is intentional

In TasksLayout.tsx, intent.target_label || intent.source_id ? A : B parses as (target_label || source_id) ? A : B because || binds tighter than ?:. Behavior is correct; the PR only swapped the string literals.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

coderabbitai[bot]

This comment was marked as resolved.

@github-actions

github-actions Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

PR governance metadata gate is not ready for d396ac49fc453ce613eae6ad99b1d731c6a7c17e:

  • Review decision is CHANGES_REQUESTED; address requested changes before merge.
  • 4 unresolved current review thread(s) remain.
  • Required check strix is FAILURE on the current head.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 new potential issues.

Open in Devin Review

Comment on lines +59 to +64
export function getWriteBoundaryLabel(
providerWriteExecuted: boolean,
context: WriteBoundaryContext = 'inspection',
) {
if (!providerWriteExecuted && context === 'local_action') return '외부 원본 변경 없음';
return providerWriteExecuted ? '원본 반영 완료' : '점검만 완료';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: Shared write-boundary label semantics changed for all callers

getWriteBoundaryLabel now takes a context defaulting to inspection, so every caller's false-case label changes from '의도만 기록' to '점검만 완료', while the Data upload/import rows pass local_action to show '외부 원본 변경 없음'. All callsites and updated tests are consistent.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines 268 to +271
status: semanticStatusToProjectStatus(candidate.status_code),
progress: semanticProgress(candidate),
category: 'Semantic KG 프로젝트',
evidence: 'project_graph',
evidence: hasParagraphEvidence(candidate) ? 'project_graph' : 'project_graph_pending',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: project_graph_pending only changes displayed labels

buildSemanticProjects emits project_graph_pending for candidates without segment/citation evidence. That value only feeds the label helpers, falling through to '원본 근거' and '실행 항목 기준'. No rendering branch keys off the evidence value, so semantic sections still render from activeSemanticCandidate.

(Refers to this code)

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

Open in Devin Review

{documentActionStatus === 'success' && documentActionResult && (
<span className="text-foreground">
{toSafeReactText(documentActionResult.document_name)} · {toSafeReactText(documentActionResult.message)} · {getWriteBoundaryLabel(documentActionResult.provider_write_executed)}
{toSafeReactText(documentActionResult.document_name)} · {getDocumentActionResultCopy(lastDocumentAction)} · {getWriteBoundaryLabel(documentActionResult.provider_write_executed, 'local_action')}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: Materialization copy pairs "requested" with "completed"

When materialization returns provider_write_executed=true, the shared status line shows '연결된 문서 저장소 반영을 요청했습니다.' (requested) next to '원본 반영 완료' (completed) via getWriteBoundaryLabel(..., 'local_action') (DocumentRepositoryTab.tsx). The two phrases read as mildly contradictory; the updated tests accept it.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

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