From 7b8524192d82b7c59492601b56f206092fe20739 Mon Sep 17 00:00:00 2001 From: hyungi Date: Mon, 8 Jun 2026 14:35:05 +0900 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=EC=9D=B8=EC=8A=A4=ED=8E=99=ED=84=B0?= =?UTF-8?q?=20md=EC=83=81=ED=83=9C=20=EC=B9=A9=20enum=20=EB=B2=84=EA=B7=B8?= =?UTF-8?q?=20(success=20=ED=95=AD=EC=83=81=20=EB=85=B8=EB=9E=91)=20+=20ar?= =?UTF-8?q?ticle=20suppress?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit documents/+page.svelte 인스펙터의 md상태 칩이 doc.md_status==='completed' 비교였는데 실제 enum은 success/partial/skipped/failed/pending 이라 'completed'가 존재하지 않음 → success 여도 항상 text-warning(노랑)으로 표시되던 라이브 버그. - documents/+page.svelte: 깨진 삼항을 MarkdownStatusBadge 재사용으로 교체. success→success(초록) 자동, pending/null→null 이라 article(news) 칩 자동 suppress. 표시 조건을 badge 가 렌더하는 5상태로 명시(빈 라벨 행 방지). - MarkdownStatusBadge: partial case 추가(tone warning 'Markdown 일부') → 대형 split 일부 실패 문서도 칩 노출 + md_status 표시 어휘를 단일 컴포넌트에 완결. FE only, 백엔드/스키마 무변. vite build + lint:tokens(신규 위반 0) PASS. Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/src/lib/components/MarkdownStatusBadge.svelte | 8 +++++++- frontend/src/routes/documents/+page.svelte | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/components/MarkdownStatusBadge.svelte b/frontend/src/lib/components/MarkdownStatusBadge.svelte index 1587675..c73c29c 100644 --- a/frontend/src/lib/components/MarkdownStatusBadge.svelte +++ b/frontend/src/lib/components/MarkdownStatusBadge.svelte @@ -9,7 +9,7 @@ * * 정책 (사용자 결정): * - pending 은 표시 안 함 (legacy 9792 건에 모두 노출되는 시각적 노이즈 회피). - * - processing/success/skipped/failed 4 상태 표시. + * - processing/success/partial/skipped/failed 5 상태 표시 (partial = 대형 split 일부 실패). * - success 도 작은 chip 으로 노출 — 1D pilot 에서 markdown 화면 식별용. * - skipped/failed 는 tooltip 으로 reason/error 보조 표시. * @@ -82,6 +82,12 @@ label: 'Markdown', tooltip: qualitySummary(mdExtractionQuality), }; + case 'partial': + return { + tone: 'warning', + label: 'Markdown 일부', + tooltip: qualitySummary(mdExtractionQuality) ?? mdExtractionError ?? null, + }; case 'skipped': return { tone: 'neutral', diff --git a/frontend/src/routes/documents/+page.svelte b/frontend/src/routes/documents/+page.svelte index 0aad960..0e2604f 100644 --- a/frontend/src/routes/documents/+page.svelte +++ b/frontend/src/routes/documents/+page.svelte @@ -10,6 +10,7 @@ import { addToast } from '$lib/stores/toast'; import { Info, X, Plus, Trash2, Tag, FolderTree, Sparkles, ChevronLeft, ArrowUpDown } from 'lucide-svelte'; import DocumentViewer from '$lib/components/DocumentViewer.svelte'; + import MarkdownStatusBadge from '$lib/components/MarkdownStatusBadge.svelte'; import UploadDropzone from '$lib/components/UploadDropzone.svelte'; import Drawer from '$lib/components/ui/Drawer.svelte'; import Modal from '$lib/components/ui/Modal.svelte'; @@ -678,7 +679,7 @@ {#if doc.ai_sub_group}
하위{doc.ai_sub_group}
{/if}
수정{shortDate(doc.updated_at || doc.created_at)}
{#if size}
원본{size}
{/if} - {#if doc.md_status}
md 상태{doc.md_status}
{/if} + {#if ['processing', 'success', 'partial', 'skipped', 'failed'].includes(doc.md_status)}
md 상태
{/if} {#if doc.read_count}
읽음{doc.read_count}회
{/if}