Files
kite/.planning/milestones/v0.2-phases/10-ux-interaction/10-UAT.md
T
curo1305andClaude Sonnet 4.6 123ae5b29b chore: archive v0.2 phase directories to milestones/v0.2-phases/
Moves phases 08–11 execution artifacts from .planning/phases/ to
.planning/milestones/v0.2-phases/ to keep .planning/phases/ clean
for the next milestone.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 14:34:52 +02:00

14 KiB
Raw Blame History

status, phase, source, started, updated, resolved_by
status phase source started updated resolved_by
resolved 10-ux-interaction 10-01-SUMMARY.md, 10-02-SUMMARY.md, 10-03-SUMMARY.md, 10-04-SUMMARY.md, 10-06-SUMMARY.md, 10-07-SUMMARY.md, 10-08-SUMMARY.md, 10-09-SUMMARY.md, 10-10-SUMMARY.md, 10-11-SUMMARY.md, 10-12-SUMMARY.md 2026-06-16T00:00:00Z 2026-06-16T19:31:00Z 10-13-PLAN.md

Current Test

[testing complete]

Tests

1. File Manager Loading Skeleton

expected: Open the file manager. While documents are loading, the content area shows 5 animated shimmer/pulse rows instead of any "Loading…" text. Once loaded, the shimmer rows disappear and real content (or an empty state) renders. result: issue reported: "Cloud folder view: no skeleton visible on load (loading=false on first render). Cloud files unclickable with no feedback." severity: major fix_applied: "loading=ref(true) in CloudFolderView; onFileOpen shows info toast. Commit ce67b9f. Local storage loads too fast to verify manually — skeleton confirmed present in template."

2. Empty State — No Documents

expected: In a folder with no documents, the content area shows a styled empty state with an icon (folder or document), a headline like "No documents yet" or similar, and descriptive subtext. Not just a blank white area. result: pass

3. Empty State — No Search Results

expected: Type a search query that returns no matches. The content area shows an empty state with a search icon, a "No results" headline, and a "Clear search" link/button that resets the query. result: pass note: Search bar only visible inside a folder (breadcrumb.length > 0) — by design, root shows folders only. Empty state confirmed working inside folder.

4. Sidebar Loading Skeletons

expected: On first load, the sidebar's Folders, Cloud, and Topics sections show animated shimmer placeholder rows while their data loads. No plain spinner or "Loading" text. result: issue reported: "Local storage too fast to see any loading. Nextcloud sidebar section does nothing until folder loads — no skeleton or feedback visible during load." severity: major

5. Sidebar Empty States

expected: With no folders created, no cloud connections, and no topics, each sidebar section shows a small (compact) empty state: a tiny icon with a brief message like "Create a folder in the file manager", "Connect in Settings", or "No topics yet". result: issue reported: "Empty states confirmed. But search bar and sorting controls are not visible at the root of the cloud and local file browser." severity: major note: Search-at-root absence was previously noted in test 3 as "by design", but user is explicitly flagging it as missing expected functionality.

6. Sidebar — No Inline "New Folder" Button

expected: The sidebar's Folders section header does NOT have a "New" or "New folder" button next to it. Folder creation happens only via the file manager toolbar. result: pass

7. Breadcrumb Bar in File Manager

expected: The file manager shows a breadcrumb bar above the content. At the root it shows "Home". After navigating into a folder it shows "Home > FolderName". Clicking "Home" navigates back to root. result: pass

8. Breadcrumb Bar in Admin Views

expected: Admin views (Users, Quotas, AI Config, Audit Log) and Settings show a breadcrumb bar with static segments like "Users", "Settings > Account", etc. No "Home" root button in these views. result: issue reported: "Admin views still show the normal user sidebar." severity: major

9. Toast on Document Delete

expected: Delete a document. A toast notification appears in the bottom-right corner with a success message (e.g., "Document deleted"). It auto-dismisses after a few seconds. result: pass

10. Toast on File Upload

expected: Upload one or more files. After upload completes, a toast appears summarising the result (e.g., "2 files uploaded" or a per-file message). It appears without a page refresh. result: pass note: User also reported drag-and-drop didn't work — covered in tests 1517.

expected: While viewing the file manager with focus NOT in a text field, press "/". The search bar receives focus (cursor appears inside it). Pressing "/" while already in a text input does NOT trigger this. result: issue reported: "Search bar not visible at directory root (see gap #2). When inside a folder where search IS visible, pressing '/' does nothing." severity: major

12. Keyboard Shortcut — U Opens Upload

expected: While viewing the file manager with focus not in a text field, press "U". The file-picker dialog opens (browser native file chooser), same as clicking the upload button. result: issue reported: "Pressing U does not open the file picker." severity: major

13. Keyboard Shortcut — N Starts New Folder

expected: While viewing the file manager with focus not in a text field, press "N". The new-folder inline input appears in the content area, same as clicking the "New folder" toolbar button. result: issue reported: "Pressing N does not trigger new folder input." severity: major

expected: With a search query active in the file manager, press "Escape". The search field clears and the full document list returns. result: issue reported: "Field clears on Escape, but search no longer works afterwards — cannot type a new query." severity: major

15. OS Drag Overlay

expected: From the OS (Finder/Explorer), drag a file and hover it over the browser window. A full-screen semi-transparent overlay appears saying something like "Drop files to upload". Releasing the file starts the upload. result: issue reported: "Overlay appears correctly, but dropping the file does not start the upload." severity: major

16. Drag Document to Folder

expected: In the file manager, drag a document row onto a folder row. The folder row highlights while the document hovers over it. Releasing drops the document into the folder (it moves; the folder item count updates). result: pass

17. Click-After-Drag Guard

expected: After dragging a document (without dropping it onto a folder — just drag and release), the document does NOT open or navigate. The drag gesture does not accidentally trigger a "file open" action. result: pass

18. Admin View Skeletons

expected: Open the Admin > Audit Log or Admin > Users page while data loads. The table body shows skeleton rows (animated shimmer cells) instead of a spinner or "Loading…" text. result: pass note: Skeleton visible but very briefly — data loads fast locally. Skeleton confirmed present.

19. Admin Audit Log Empty State

expected: With no audit log entries (or with filters that match nothing), the audit log table shows an empty state with a "Clear filters" button. Not just an empty table with no rows. result: pass

Summary

total: 19 passed: 10 issues: 9 pending: 0 skipped: 0 blocked: 0

Gaps

  • truth: "Sidebar Cloud section shows animated shimmer rows while Nextcloud data loads" status: failed reason: "User reported: Local storage too fast to see any loading. Nextcloud sidebar section does nothing until folder loads — no skeleton or feedback visible during load." severity: major test: 4 root_cause: "TreeItem.vue lines 48-52 render

    Loading…
    instead of animate-pulse shimmer rows. The loading state ref is tracked correctly but the visual treatment does not match the shimmer pattern used elsewhere in AppSidebar." artifacts:

    • path: "frontend/src/components/ui/TreeItem.vue" issue: "v-if='loading' branch renders plain text instead of animated skeleton rows (lines 48-52)" missing:
    • "Replace plain Loading… div with 3 shimmer rows using animate-pulse pattern matching AppSidebar lines 60-64" debug_session: ""
  • truth: "Admin views show admin-specific layout (no user sidebar) with breadcrumb bar" status: failed reason: "User reported: Admin views still show the normal user sidebar." severity: major test: 8 root_cause: "App.vue renders in a v-else branch with no admin exemption. When /admin/* routes render, Vue Router places AdminLayout.vue into but AppSidebar is outside it — unconditionally rendered for all non-auth routes. Both sidebars appear simultaneously." artifacts:

    • path: "frontend/src/App.vue" issue: "v-else branch (lines 3-8) renders without checking route.meta.requiresAdmin" missing:
    • "Add third branch in App.vue: when route.matched.some(r => r.meta.requiresAdmin), render only with no AppSidebar" debug_session: ""
  • truth: "Pressing '/' while in the file manager (with search bar visible) focuses the search input" status: failed reason: "User reported: pressing '/' does nothing when search bar is visible inside a folder." severity: major test: 11 root_cause: "Shared root cause with tests 12 and 13: ref='routeViewRef' on in App.vue resolves to the RouterView component proxy, not the FileManagerView instance. RouterView.setup() never calls expose(), so routeViewRef.value has no focusSearch/triggerUpload/startNewFolder properties. All calls silently no-op via optional chaining ?." artifacts:

    • path: "frontend/src/App.vue" issue: "ref='routeViewRef' on (line 6); shortcut handlers use routeViewRef.value?.focusSearch?.() etc. (lines 37, 43, 46) which are unreachable"
    • path: "frontend/src/views/FileManagerView.vue" issue: "defineExpose({ focusSearch, triggerUpload, startNewFolder }) is correct (lines 190-196) but unreachable via routeViewRef" missing:
    • "Replace routeViewRef approach with router.currentRoute.value.matched[0].instances.default to reach actual FileManagerView instance, or use a Pinia store / event bus for keyboard action dispatch" debug_session: ""
  • truth: "Pressing 'U' while in the file manager opens the file-picker dialog" status: failed reason: "User reported: pressing U does not open the file picker." severity: major test: 12 root_cause: "Same root cause as test 11: routeViewRef resolves to RouterView proxy, not FileManagerView. triggerUpload?.() is a no-op." artifacts:

    • path: "frontend/src/App.vue" issue: "routeViewRef.value?.triggerUpload?.() (line 43) silently no-ops" missing:
    • "Fixed by the same routeViewRef fix as test 11" debug_session: ""
  • truth: "Pressing 'N' while in the file manager triggers the new-folder inline input" status: failed reason: "User reported: pressing N does not trigger new folder input." severity: major test: 13 root_cause: "Same root cause as test 11: routeViewRef resolves to RouterView proxy, not FileManagerView. startNewFolder?.() is a no-op." artifacts:

    • path: "frontend/src/App.vue" issue: "routeViewRef.value?.startNewFolder?.() (line 46) silently no-ops" missing:
    • "Fixed by the same routeViewRef fix as test 11" debug_session: ""
  • truth: "After pressing Escape to clear search, the search field remains functional for new queries" status: failed reason: "User reported: field clears on Escape but search no longer works afterwards — cannot type a new query." severity: major test: 14 root_cause: "SearchBar.vue uses type='search' on the input (line 6) and handles @keydown.escape without .prevent. Browsers treat Escape on type='search' as native clear+blur — the field loses focus and the user cannot type without clicking first. Event also bubbles to App.vue global handler (no .stop) causing a redundant clearSearch call." artifacts:

    • path: "frontend/src/components/documents/SearchBar.vue" issue: "@keydown.escape handler (line 11) lacks .prevent and .stop — browser native blur fires after Vue handler"
    • path: "frontend/src/App.vue" issue: "Global Escape handler (line 39) may fire redundantly after input blurs" missing:
    • "Change @keydown.escape to @keydown.escape.prevent.stop in SearchBar.vue to suppress native blur and prevent bubbling" debug_session: ""
  • truth: "Dropping a file from OS onto the drag overlay starts the upload" status: failed reason: "User reported: overlay appears but dropping the file does not start the upload." severity: major test: 15 root_cause: "OsDragOverlay registers window 'drop' listener in bubble phase. StorageBrowser registers @drop.prevent on every folder row (line 79), which consumes the native drop event before it bubbles to window. OsDragOverlay has pointer-events-none so drops land on underlying DOM elements (folder rows) which intercept them first. The window listener never fires." artifacts:

    • path: "frontend/src/components/layout/OsDragOverlay.vue" issue: "window.addEventListener('drop', this.onDrop) registered in bubble phase (line 56) — consumed by folder rows first"
    • path: "frontend/src/components/storage/StorageBrowser.vue" issue: "@drop.prevent on folder rows (line 79) intercepts OS drops; onDropDocOnFolder guard (line 364) exits early for OS drags (draggingFile is null)" missing:
    • "Register OsDragOverlay window listener in capture phase: window.addEventListener('drop', this.onDrop, true) so it runs before element-level handlers" debug_session: ""
  • truth: "Search bar and sorting controls are visible at the root level of the file manager and cloud file browser (currently hidden behind breadcrumb.length > 0 guard)" status: failed reason: "User reported: search bar and sorting controls not visible at the root of the cloud and local file browser." severity: major test: 5 root_cause: "StorageBrowser.vue line 287: showSearch computed is props.mode === 'local' && props.breadcrumb.length > 0. Both conditions must be true — breadcrumb is [] at root so showSearch is false there; cloud mode also always false because mode guard requires 'local'. SearchBar (line 12) and SortControls (line 14) both share v-if='showSearch' so both disappear." artifacts:

    • path: "frontend/src/components/storage/StorageBrowser.vue" issue: "showSearch computed (line 287) has breadcrumb.length > 0 and mode === 'local' guards; both incorrect" missing:
    • "Change showSearch to computed(() => props.mode === 'local' || props.mode === 'cloud') — remove breadcrumb depth guard entirely" debug_session: ""