839 Commits
Author SHA1 Message Date
curo1305 595b33a68c fix(phase-11): close mobile storage UAT gaps 2026-06-17 10:48:35 +02:00
curo1305 c48ebf152c test(phase-11): record mobile UAT gaps 2026-06-17 10:37:21 +02:00
curo1305 64aa960d20 test(phase-11): add Nyquist validation coverage 2026-06-17 09:58:59 +02:00
curo1305andClaude Sonnet 4.6 f5fc8d111b docs(phase-11): add security threat verification — 13/13 threats CLOSED
Retroactive-STRIDE audit for Phase 11 (visual-design-responsive-layout-cleanup).
No plan-time threat model existed; register built from implementation files.
All 13 threats closed: 7 mitigated, 6 accepted with documented rationale.
threats_open: 0 — phase 11 security gate passes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 09:51:47 +02:00
curo1305 1c0b231002 docs(11): update VERIFICATION.md — all 12 requirements satisfied after TreeItem gap fix 2026-06-17 09:37:36 +02:00
curo1305 28e75e971d fix(11): TreeItem.vue — focus-visible ring on all interactive elements; skeleton width → static Tailwind
- Expand/collapse button, router-link label, and button label all get focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-1
- :style skeleton width replaced with :class w-12/w-16/w-20 (same fix applied to AppSidebar in 11-05)
- Closes VISUAL-01 and VISUAL-03 gaps found by verifier
2026-06-17 09:35:06 +02:00
curo1305 8ac5b15f51 docs(11): add code review report 2026-06-17 09:26:45 +02:00
curo1305 f667a3bbc8 docs(phase-11): update tracking after wave 5 — all plans complete 2026-06-17 08:03:50 +02:00
curo1305 73f409dd2f chore: merge executor worktree (worktree-agent-a39e918c6d4ac337a) 2026-06-17 08:03:27 +02:00
curo1305 b121bc2a86 docs(11-06): complete Plan 11-06 — dead-code cleanup and final verification SUMMARY
Summary covers all 8 tasks:
- Task 1 (prior): AccountView.vue deleted (a8e0a19)
- Tasks 2-5: admin test classification (3 retained), FolderRow.vue deleted,
  stale FolderRow tests removed; 268/268 tests pass (a928b54)
- Task 6 (prior): final bundle analysis committed (888d376)
- Task 7: phase11-final-summary.md — -81 kB / -30.6% main bundle (df981fb)
- Task 8: 11-VERIFICATION.md — all 12 Phase 11 requirements SATISFIED (9ad88ab)
2026-06-17 08:02:16 +02:00
curo1305 9ad88abe88 docs(11-06): add 11-VERIFICATION.md — all 12 Phase 11 requirements mapped to evidence
Maps VISUAL-01..04, RESP-01..05, CODE-07, PERF-02, PERF-03 to concrete
code locations, test describe/it strings, and build output evidence.

All 12 requirements verified as SATISFIED:
- VISUAL-01: skeleton Tailwind classes; AppSidebar.visual.test.js
- VISUAL-02: @tailwindcss/forms active; ShareModal form tests
- VISUAL-03: typography normalized; typography.visual.test.js
- VISUAL-04: 62 focus-visible occurrences; AppSidebar.visual.test.js
- RESP-01: App.vue hamburger drawer with Teleport backdrop
- RESP-02: StorageBrowser hidden md/sm columns; skeleton test
- RESP-03: 36px touch targets; StorageBrowser.skeleton.test.js
- RESP-04: max-h-[90vh] overflow-y-auto on all 4 modals; mobile tests
- RESP-05: AdminLayout.vue hamburger drawer pattern
- CODE-07: FolderRow.vue + AccountView.vue deleted; 3 admin tests retained
- PERF-02: 4 perf artifacts in .planning/perf/
- PERF-03: 21 JS chunks vs 15 baseline; all non-initial routes lazy
2026-06-17 08:01:00 +02:00
curo1305 df981fbced docs(11-06): write Phase 11 bundle final summary — baseline vs final comparison
Baseline: 264.63 kB main / 89.34 kB gzip / 15 JS chunks
Final:    183.62 kB main / 64.83 kB gzip / 21 JS chunks

Delta: -81.01 kB raw (-30.6%), -24.51 kB gzip (-27.4%), +6 new lazy chunks

Documents the 5 new lazy route chunks from Plan 11-02 (SettingsView,
TopicsView, DocumentView, CloudStorageView, CloudFolderView), CSS growth
from new responsive Tailwind classes, and the intentional synchronous
FileManagerView decision (D-10, critical first authenticated surface).
2026-06-17 07:58:14 +02:00
curo1305 a928b54781 chore(11-06): dead-code cleanup — delete FolderRow.vue, retain admin tab tests
Task 2 — admin test classification:
  - AdminAiConfigTab.test.js: RETAINED (tests AdminAiView.vue, a live component)
  - AdminQuotasTab.test.js: RETAINED (tests AdminQuotasView.vue, a live component)
  - AdminUsersTab.test.js: RETAINED (tests AdminUsersView.vue, a live component)

Task 3 — confirmed absent: HomeView.vue, FolderView.vue, AdminView.vue all absent

Task 4 — dead-code scan:
  - FolderRow.vue: DELETED — no import in any live component; StorageBrowser renders
    folder rows inline; FolderRow had no active route or active import (CLAUDE.md rule)

Task 5 — stale test removal:
  - dropdown.test.js: removed 2 FolderRow tests (tested dead component);
    kept 2 DocumentCard Teleport tests (protect live surface)
  - No unused named imports found in live components

268/268 tests pass.
2026-06-17 07:56:00 +02:00
curo1305 6e3d1f866a chore: merge executor worktree (worktree-agent-a3ed83649498e1792) 2026-06-17 05:43:53 +02:00
curo1305 888d3761d5 chore(11-06): capture final Phase 11 bundle analysis report
- Run ANALYZE=true npm run build after all Phase 11 optimizations
- Main bundle: 183.62 kB raw / 64.84 kB gzip (was 264.63 kB / 89.34 kB)
- SettingsView, TopicsView, DocumentView all now in separate lazy chunks
- 25 chunks total vs 15 at baseline
2026-06-17 03:55:12 +02:00
curo1305 a8e0a199f2 chore(11-06): delete orphaned AccountView.vue
- AccountView.vue had no active route component reference
- /account path uses redirect: '/settings' with no component import
- No imports found across the entire codebase
- Satisfies CODE-07: no unreferenced route views remain
2026-06-17 00:39:05 +02:00
curo1305 e72506fc89 docs(phase-11): update tracking after wave 4 2026-06-16 21:51:23 +02:00
curo1305andClaude Sonnet 4.6 eef76e02dc docs(11-05): complete visual consistency pass plan summary
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 21:50:28 +02:00
curo1305 2af5b7c313 feat(11-05): visual consistency pass — typography, focus-visible, hover/active states, skeleton cleanup
- Normalize page titles to text-2xl font-semibold (was font-bold in TopicsView, DocumentView, SharedView)
- Normalize section titles to text-lg font-semibold (was text-xl in SettingsPreferencesTab, SettingsAiTab, SettingsCloudTab, BackupCodesDisplay, CloudCredentialModal)
- Normalize panel headings to text-sm font-semibold (SettingsAccountTab, DocumentView)
- Normalize AdminOverviewView page title from text-xl to text-2xl font-semibold
- Replace decorative sidebar skeleton inline styles with static Tailwind width classes (w-12/w-16/w-20)
- Add focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-1 to all interactive buttons across the app
- Add active:bg-* states to primary and secondary buttons for coherent press feedback
- Update nav-link scoped CSS in AppSidebar and AdminSidebar to include active:bg-gray-200 and focus-visible ring
- Add 7 new tests: VISUAL-01 skeleton class invariant, VISUAL-04 focus-visible invariant, VISUAL-03 typography invariant (36 test files, 270 tests pass)
2026-06-16 21:48:56 +02:00
curo1305 deea237033 docs(phase-11): update tracking after wave 3 2026-06-16 21:38:15 +02:00
curo1305 86d28046ca chore: merge executor worktree (worktree-agent-acd1ece9cc8092915) 2026-06-16 21:37:59 +02:00
curo1305 087eec1047 docs(11-04): complete forms baseline and mobile-safe modals plan summary 2026-06-16 21:35:52 +02:00
curo1305 df53cef3b7 feat(11-04): mobile-safe modals and form baseline verification
- Add max-h-[90vh] overflow-y-auto to ShareModal, CloudCredentialModal,
  FolderDeleteModal, and DocumentView cloud-delete modal panels
- Add responsive px-4 sm:px-6 to DocumentPreviewModal header for narrow viewports
- Add data-test attributes to all modal panels for testability
- Confirm @tailwindcss/forms active in tailwind.config.js (no drift found)
- Audit forms: focus:outline-none focus:ring-2 pattern is consistent throughout
- Add 4 test files covering mobile-safe modal classes and form baseline:
  ShareModal.mobile.test.js, CloudCredentialModal.mobile.test.js,
  FolderDeleteModal.mobile.test.js, DocumentPreviewModal.mobile.test.js

VISUAL-02, RESP-04
2026-06-16 21:33:57 +02:00
curo1305 71ddbfd426 docs(phase-11): update tracking after wave 2 2026-06-16 21:26:47 +02:00
curo1305 e32793c126 chore: merge executor worktree (worktree-agent-ae52d6537a4569901) 2026-06-16 21:26:09 +02:00
curo1305 dfac0a9617 docs(11-03): complete responsive shells and storage rows plan summary 2026-06-16 21:24:26 +02:00
curo1305 d914761120 feat(11-03): responsive shells and storage rows
- App.vue: mobile header with hamburger button; slide-in overlay drawer
  with Teleport backdrop, translate-x-0/-translate-x-full transition;
  drawer state owned by App.vue (D-04/D-05); route-change auto-close
- AdminLayout.vue: matching responsive treatment — hamburger, backdrop,
  drawer, route-change close (RESP-05)
- StorageBrowser.vue: responsive grid templates
  (mobile: grid-cols-[2rem_1fr_6rem], sm: +modified, md: all 5 cols);
  Size hidden below md, Modified hidden below sm; action buttons get
  min-w-[36px] min-h-[36px] touch targets (RESP-02, RESP-03)
- Tests: drawer open/close/backdrop-close/route-change behaviour;
  admin drawer; responsive column and touch-target class assertions
2026-06-16 21:22:59 +02:00
curo1305 6155aaba46 docs(phase-11): update tracking after wave 1 2026-06-16 21:12:35 +02:00
curo1305 dfc6ff52f7 docs(11-02): complete lazy-load routes plan — SUMMARY.md 2026-06-16 21:11:46 +02:00
curo1305 4fa07b3874 perf(11-02): lazy-load non-critical routes — PERF-03
- Keep FileManagerView synchronous for / per D-10 (critical first authenticated surface)
- Lazy-load TopicsView, DocumentView, SettingsView, CloudStorageView, CloudFolderView
- /folders/:folderId reuses synchronous FileManagerView (no split, same component)
- Main bundle reduced from 264.63 kB to 180.17 kB (split into 5 new route chunks)
- Extend router guard tests: admin child route blocking, refresh-before-guard flow,
  lazy-loaded route resolution — 234 tests pass (15 new tests added)
2026-06-16 21:10:48 +02:00
curo1305 7547e8ae97 docs(phase-11): update tracking after wave 0 2026-06-16 21:07:57 +02:00
curo1305andClaude Sonnet 4.6 3361a63ffd docs(11-01): add plan summary — baseline captured, audit complete
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 21:06:22 +02:00
curo1305 6d56d25977 docs(11-01): capture Phase 11 bundle baseline and frontend audit
- Ran ANALYZE=true npm run build; copied stats.html to .planning/perf/phase11-baseline.html
- Added phase11-baseline-summary.md: chunk sizes, route lazy-load audit,
  responsive/modal/typography/dead-code findings for plans 11-02..11-06
- Main bundle: 264.63 kB raw / 89.34 kB gzip; 5 user routes still synchronous
- Admin/auth routes already lazy-loaded; CSS 98.74 kB raw (expected for full UI)
2026-06-16 21:05:12 +02:00
curo1305 0fb2a53a4f chore(11-01): add ANALYZE=true opt-in for rollup-plugin-visualizer in vite.config.js
- Wrapped config in async defineConfig factory so visualizer can be dynamically
  imported only when ANALYZE=true; normal builds incur zero overhead
- Added frontend/stats.html to .gitignore (ephemeral artifact; canonical copy
  lives in .planning/perf/)
2026-06-16 21:04:54 +02:00
curo1305 41d136fa1f docs(state): record phase 11 context session 2026-06-16 20:50:43 +02:00
curo1305 f03d5b095e docs(11): capture phase context 2026-06-16 20:50:37 +02:00
curo1305andClaude Sonnet 4.6 83cdf28231 docs(phase-10): evolve PROJECT.md and resolve UAT after gap closure
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 20:12:46 +02:00
curo1305andClaude Sonnet 4.6 ac95c1243f docs(phase-10): complete gap closure verification — 219 tests, all 6 UAT gaps closed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 20:11:51 +02:00
curo1305 2263abb2eb chore: merge executor worktree (worktree-agent-a2c859712240996ff) 2026-06-16 19:22:48 +02:00
curo1305 0df2942e4c docs(10-13): complete gap closure plan summary
- 6 UAT gaps closed: shimmer, search-at-root, admin sidebar, keyboard shortcuts, escape focus, OS drag-drop
- 219 tests passing (8 new)
- 5 production files modified, 3 test files added
2026-06-16 19:20:16 +02:00
curo1305 339f5a0c82 test(10-13): regression tests for all 6 UAT gaps
- keyboard.test.js: Gap 4 test — matched.find(r => r.instances?.default) resolves to FileManagerView
- TreeItem.test.js: Gap 1 tests — animate-pulse present, 'Loading' text absent during shimmer state
- StorageBrowser.showSearch.test.js: Gap 2 tests — showSearch true for local+cloud at root
- All 219 tests pass (8 new, 211 existing)
2026-06-16 19:19:02 +02:00
curo1305 bac5dcfe3d fix(10-13): escape modifier and capture-phase OS drop
- SearchBar.vue: add .prevent.stop to @keydown.escape to suppress browser native blur (Gap 5)
- OsDragOverlay.vue: register window drop listener with capture=true to fire before folder-row handlers (Gap 6)
2026-06-16 19:12:57 +02:00
curo1305 5972a62041 fix(10-13): admin sidebar bleed and keyboard instance resolution
- App.vue: add v-else-if branch for admin routes that renders only router-view (no AppSidebar)
- App.vue: replace routeViewRef with getFileManagerInstance() using matched.find(r => r.instances?.default)
- App.vue: remove unused ref import (Gap 3 + Gap 4)
2026-06-16 19:12:05 +02:00
curo1305 76785b4d96 fix(10-13): sidebar shimmer rows and search-at-root visibility
- TreeItem.vue: replace 'Loading…' text with 3 animate-pulse shimmer rows
- StorageBrowser.vue: showSearch now true for mode=local OR mode=cloud (Gap 1 + Gap 2)
2026-06-16 19:11:25 +02:00
curo1305 42ab542e25 fix(10-13): admin sidebar bleed and keyboard instance resolution
- App.vue: add v-else-if branch for admin routes that renders only router-view (no AppSidebar)
- App.vue: replace routeViewRef with getFileManagerInstance() using matched.find(r => r.instances?.default)
- App.vue: remove unused ref import (Gap 3 + Gap 4)
2026-06-16 19:07:54 +02:00
curo1305 f9e5a31945 fix(10-13): sidebar shimmer rows and search-at-root visibility
- TreeItem.vue: replace 'Loading…' text with 3 animate-pulse shimmer rows
- StorageBrowser.vue: showSearch now true for mode=local OR mode=cloud (Gap 1 + Gap 2)
2026-06-16 19:06:52 +02:00
curo1305 e3c681f99d docs(10): add root causes from diagnosis — 8 gaps diagnosed 2026-06-16 17:36:17 +02:00
curo1305 6d238a4ff3 test(10): complete UAT - 10 passed, 9 issues 2026-06-16 17:32:03 +02:00
curo1305 11228306e4 Merge cleanup branch 2026-06-16 15:40:33 +02:00
curo1305 3307282570 Fix Docker stack bootstrap 2026-06-16 15:35:06 +02:00