feat: add accessible Storybook UX contracts - #246
Conversation
# Conflicts: # CHANGELOG.md # docs/architecture/adr/0001-cloud-offload-goal-state.md # docs/architecture/adr/README.md # src/lib/CloudArchive.svelte # src/lib/cloudArchiveAdmissionContract.test.ts
There was a problem hiding this comment.
🔍 Duplicates view leaks raw per-item error
Duplicates.svelte:140 still renders {r.error} for a failed trash move, while the same per-item pattern was rewritten to generic customer copy in Cleanup.svelte and Organize.svelte. This leaves the deduplicated view inconsistent with the customer-copy contract the PR applies elsewhere. The line sits outside the diff, so it was not reported as a bug.
(Refers to this code)
Was this helpful? React with 👍 or 👎 to provide feedback.
| <p class="muted">먼저 iCloud 업로드와 최신 파일 정보를 확인합니다. 파일 ID를 입력하면 연결된 서비스에서 파일과 위치를 다시 확인합니다. 확인 중 파일이 바뀌면 원본을 보존합니다.</p> | ||
| {:else if copied.receipt.provider === "onedrive"} | ||
| <p class="muted">macOS File Provider 증거가 불완전하면 OAuth 연결을 사용해 영수증의 OneDrive 상대 경로를 직접 조회하고 QuickXorHash를 검증합니다. 임의 item ID는 받지 않습니다.</p> | ||
| <p class="muted">iCloud 확인이 완전하지 않으면 연결된 OneDrive에서 파일 위치와 내용을 다시 확인합니다.</p> |
There was a problem hiding this comment.
🟡 Google Drive and OneDrive copy hints name iCloud
The post-copy verification hint names iCloud inside the google-drive and onedrive receipt branches (CloudArchive.svelte). A customer who copied to Google Drive or OneDrive reads guidance about a service they are not using.
Prompt for agents
The copy-verification hints for the google-drive and onedrive receipt branches in src/lib/CloudArchive.svelte (around lines 1505 and 1507) were reworded from a generic macOS File Provider description to text that hardcodes the word iCloud. These branches only render for Google Drive and OneDrive receipts, so referencing iCloud is inaccurate (and on Windows/Linux there is no iCloud at all). Replace the iCloud references with provider-neutral customer wording, or use the selected provider's display name (e.g. via cloudProviderLabel(copied.receipt.provider)) so the guidance names the correct service.
Was this helpful? React with 👍 or 👎 to provide feedback.
Purpose
Add an accessible, token-driven Storybook UX contract for DiskSage's provider status surfaces without moving provider, cleanup, or filesystem authority into the browser layer.
Exact current state
feat/provider-sync-dynamic-goals, exact base64e58c98a46104148bf599fa7e796da4b576220a21b143d7100c66d8f32265aa9be29507a48dfd2d32469255556is queued; Release32469255633is in progress. Pending/queued/absent checks are not represented as passingCurrent repairs
Storybook viewport isolation
A current review finding showed that a mobile story changed Playwright's viewport to 375×812 without restoring a desktop viewport, making subsequent accessibility/interaction results depend on story order.
The repair was test-first:
src/lib/storybookTestRunnerContract.test.tsdrives the real exported Storybook test-runner config with a mobile story followed by a desktop story on the same page object and requires both viewport transitions;.storybook/test-runner.tsnow sets an explicit viewport on every visit: 375×812 for the mobile contract and 1280×800 otherwise;Svelte 5 layout contract
The root layout used deprecated
<slot />syntax despite the application being on Svelte 5. The layout now typeschildrenas a SvelteSnippetand renders it with{@render children()}while preserving the skip link and app-wide design-token import.The current head adds only a docs-only evidence-count refresh after those source/test repairs. Existing review findings about the scan-control ARIA group, unique ProviderStatusCard IDs, h1 story headings, static Storybook output testing, and the mobile viewport parameter have been verified against the current source and their addressed threads are resolved. The global design-token control styling remains an explicit review item rather than being silently changed.
UX / authority boundary
ProviderStatusCardremains a pure state renderer with explicit IDs and heading level;Required before integration
Do not merge this stack edge unless its exact unchanged head and the exact #213 parent satisfy every applicable live Test/Release/Security/SAST/accessibility/review gate, all valid current-head findings are addressed, the stack ancestry remains current, and protected-main integration separately satisfies repository-wide exact coverage, package/SBOM/provenance, and live review governance. Pending, queued, skipped-required, failed, stale, predecessor, synthetic, status-only, model-only, no-source, or infrastructure-only evidence is non-passing.
Summary by CodeRabbit
새 기능
버그 수정
접근성
문서 및 테스트