KB: skymirror
← All workspaces4101 results — page 1 of 83
| Title | Domain | Type | Severity | Source | Freshness | Updated |
|---|---|---|---|---|---|---|
| Known Remaining Issues | skymirror/transfer | incident | medium | HANDOFF-file-manager-dev4-20260224-bug-crusher.md | 100 | 2026-02-24 |
|
Body:
- No loading spinner when expanding a folder — children load async with no visual feedback
- Cascade-on-load is one level deep — checking a folder, expanding it, then expanding a grandchild does not auto-check grandchild's children until that grandchild is also explicitly checked
- "Select all" header checkbox selects root-level entries only — does not include expanded children in the flattened list
- No drag-and-drop between panels
- Size shows `-1 B` for files where rclone returns unknown s...
|
||||||
| Files Changed | skymirror/transfer | pattern | info | HANDOFF-file-manager-dev4-20260224-bug-crusher.md | 100 | 2026-02-24 |
|
Body:
| File | Change |
|------|--------|
| `app/Http/Controllers/FileBrowserController.php` | Path construction: use `Name` not `Path` field |
| `resources/js/vue/components/FilePanel.vue` | Async `onToggleExpand()`, passes children to store |
| `resources/js/vue/components/FileTree.vue` | Header row to CSS grid matching data rows |
| `resources/js/vue/components/FileTreeRow.vue` | Checkbox extracted to own 32px grid column |
| `resources/js/vue/components/Toolbar.vue` | Org-name labels, sorting b...
|
||||||
| Gotchas Discovered | skymirror/transfer | incident | medium | HANDOFF-file-manager-dev4-20260224-bug-crusher.md | 100 | 2026-02-24 |
|
Body:
- rclone `operations/list` `Path` field is relative to drive root, not to the `remote` query parameter. Listing `remote: "Brosjyre"` returns items with `Path: "Brosjyre/inkludert"`. Backend must use `Name` field when building child paths.
- Vue 3 `ref()` wrapping a `Map` works correctly in computed properties: `.get()`, `.set()`, `.has()`, `.delete()` all trigger reactivity as expected.
- `setEntries()` clearing expand/children state means a manual refresh loses all expand state. Accepted tra...
|
||||||
| Architecture Decisions | skymirror/transfer | pattern | info | HANDOFF-file-manager-dev4-20260224-bug-crusher.md | 100 | 2026-02-24 |
|
Body:
- `childrenMap` lives in Pinia store (not component state) — caches children across expand/collapse cycles without re-fetching
- `setEntries()` clears both `expandedPaths` and `childrenMap` on navigate/refresh — prevents stale children after directory change
- Backend uses entry `Name` not rclone `Path` for path construction — avoids coupling to rclone's drive-root-relative path semantics
- `shared: boolean` on `AccountGroup` type — cleaner than string prefix checks in templates
---
|
||||||
| Features Added | general | pattern | info | HANDOFF-file-manager-dev4-20260224-bug-crusher.md | 100 | 2026-02-24 |
|
Body:
### 4. Cascading checkbox selection
Checking a folder checkbox recursively selects all loaded descendants in `filePanelStore.ts`. Unchecking deselects all descendants. When children are loaded via `setChildren()`, they auto-inherit their parent's checked state (cascade-on-load). Works whether or not the folder is visually expanded.
File: `resources/js/vue/stores/filePanelStore.ts`
### 5. Dropdown labels: org name instead of "Fellesdisk"
Nextcloud team folders now display `{OrgName} - Team...
|
||||||
| Bugs Fixed | skymirror/transfer | incident | medium | HANDOFF-file-manager-dev4-20260224-bug-crusher.md | 100 | 2026-02-24 |
|
Body:
### 1. Folder expand was stubbed out (never fetched children)
Root cause in `filePanelStore.ts`: `toggleExpand()` only toggled `expandedPaths` Set. The `flattenedEntries` computed had an empty if-block for expanded paths — children were never fetched or rendered.
Fix: Added `childrenMap` (`Map<string, FileEntry[]>`) to store state. `flattenedEntries` computed now recursively inserts children after their parent entry. `FilePanel.vue` gained async `onToggleExpand()` which calls `listFiles()` ...
|
||||||
| Status | skymirror/transfer | pattern | info | HANDOFF-018-260225-file-manager-dev16.md | 100 | 2026-02-25 |
|
Body:
- All code changes committed and pushed (in 840e76b)
- Rclone daemon systemd update requires `sudo systemctl daemon-reload && sudo systemctl restart rclone-daemon`
- Frontend validated by user for Phase 3 fix (both sides show checkmark)
|
||||||
| Gotchas Discovered | skymirror/transfer | incident | medium | HANDOFF-018-260225-file-manager-dev16.md | 100 | 2026-02-25 |
|
Body:
1. **Google Docs name collision:** When Drive has both a Google Doc and a real file with the same name, rclone exports the Doc creating a single dest file. Compare must handle N source → 1 dest mapping.
2. **Nextcloud WebDAV concurrency limit:** Nextcloud fails with "context canceled" PROPFIND errors above ~8 concurrent connections. Must cap transfers for WebDAV targets.
3. **Folder metadata storm:** Each panel fires one `listRecursive` per visible folder for size/count metadata. Without thro...
|
||||||
| Files Changed (7) | skymirror/transfer | pattern | info | HANDOFF-018-260225-file-manager-dev16.md | 100 | 2026-02-25 |
|
Body:
| File | Change |
|---|---|
| `FileBrowserController.php` | Phase 3 matching + parallel `listRecursiveParallel` |
| `RcloneService.php` | `isWebDavRemote()`, `transferConfig()`, `listRecursiveParallel()` |
| `RcloneClient.php` | `callParallel()` with `Http::pool()` |
| `FilePanel.vue` | Concurrency limiter for `fetchFolderSizes` (max 3) |
| `syncStore.ts` | Name-collision dedup in folder aggregation |
| `SyncStatusBadge.vue` | (from dev #15, already committed) |
| `SyncStatus.ts` | (from dev ...
|
||||||
| Performance: Parallel operations | skymirror/transfer | pattern | info | HANDOFF-018-260225-file-manager-dev16.md | 100 | 2026-02-25 |
|
Body:
**Problem 1:** `fetchFolderSizes()` fired 15+ concurrent `listRecursive` calls → overwhelmed rclone/Nextcloud → 30s timeout.
**Fix:** `FilePanel.vue:343-382` — Concurrency limiter (max 3 simultaneous metadata requests per panel). Queue-based drain pattern.
**Problem 2:** `compareDeep()` ran two `listRecursive` calls sequentially (source then dest).
**Fix:**
- `RcloneClient.php:82-119` — New `callParallel()` using `Http::pool()` for concurrent RC API calls
- `RcloneService.php` — New `listR...
|
||||||
| Performance: Rclone transfer optimization | skymirror/transfer | pattern | info | HANDOFF-018-260225-file-manager-dev16.md | 100 | 2026-02-25 |
|
Body:
**Problem:** Default daemon settings (4 transfers, 8 checkers) underutilized server capacity (Ryzen 9 3900X, 59 GB RAM).
**Changes:**
1. **Daemon settings** (systemd service file — user applied manually):
- `--transfers=16`, `--checkers=32`, `--drive-chunk-size=128M`, `--buffer-size=64M`
- `--drive-pacer-min-sleep=10ms`, `--drive-pacer-burst=200`
2. **Per-operation WebDAV throttling** (`RcloneService.php:385-414`):
- New `isWebDavRemote()` + `transferConfig()` methods
- WebDAV o...
|
||||||
| Bug Fixed: Google Docs name-collision compare failure | general | incident | medium | HANDOFF-018-260225-file-manager-dev16.md | 100 | 2026-02-25 |
|
Body:
**Symptom:** Two source files with identical name (Google Doc size=-1 + real .docx 15.4 KB) → only 1 dest file after export → compare showed halvsirkel (partial) instead of checkmark.
**Root cause:** Phase 2 name-only matching only processed `size === -1` files. The real file sharing the same name stayed `source_only`. Additionally, dest-side folder aggregation used `Math.max(thisSide, otherSide)` without accounting for name collisions inflating the source count.
**Fix (2 files):**
- `FileB...
|
||||||
| `copy()` → no index change (next periodic re-index catches it) | skymirror/transfer | pattern | info | HANDOFF-028-260227-fileops-index-sync.md | 100 | 2026-02-27 |
|
Body:
`copy()` → no index change (next periodic re-index catches it)
|
||||||
| `destroy()` → `deleteForPath()` after rclone delete | skymirror/transfer | pattern | info | HANDOFF-028-260227-fileops-index-sync.md | 100 | 2026-02-27 |
|
Body:
`destroy()` → `deleteForPath()` after rclone delete
|
||||||
| `mkdir()` → `insertDirectory()` after rclone mkdir | skymirror/transfer | pattern | info | HANDOFF-028-260227-fileops-index-sync.md | 100 | 2026-02-27 |
|
Body:
`mkdir()` → `insertDirectory()` after rclone mkdir
|
||||||
| `rename()` → `movePath()` after rclone rename | skymirror/transfer | pattern | info | HANDOFF-028-260227-fileops-index-sync.md | 100 | 2026-02-27 |
|
Body:
`rename()` → `movePath()` after rclone rename
|
||||||
| `move()` → `movePath()` after rclone move | skymirror/transfer | pattern | info | HANDOFF-028-260227-fileops-index-sync.md | 100 | 2026-02-27 |
|
Body:
`move()` → `movePath()` after rclone move
|
||||||
| `insertDirectory()` — inserts a new directory entry via updateOrCreate | general | pattern | info | HANDOFF-028-260227-fileops-index-sync.md | 100 | 2026-02-27 |
|
Body:
`insertDirectory()` — inserts a new directory entry via updateOrCreate
|
||||||
| `movePath()` — updates path, parent_path, name for entry + all descendants in... | skymirror/transfer | pattern | info | HANDOFF-028-260227-fileops-index-sync.md | 100 | 2026-02-27 |
|
Body:
`movePath()` — updates path, parent_path, name for entry + all descendants in a transaction
|
||||||
| Both respect persisted localStorage values when available | skymirror/storage | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Both respect persisted localStorage values when available
|
||||||
| Source panel still defaults to `accounts[0]` | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Source panel still defaults to `accounts[0]`
|
||||||
| Dest panel now defaults to `accounts[1]` (second account) instead of `account... | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Dest panel now defaults to `accounts[1]` (second account) instead of `accounts[0]`
|
||||||
| All NC team folders (Snarveier, Fellesdisk, etc.) now list files correctly | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
All NC team folders (Snarveier, Fellesdisk, etc.) now list files correctly
|
||||||
| Fix: wrap effectivePath construction with outer `rtrim(..., '/')` | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Fix: wrap effectivePath construction with outer `rtrim(..., '/')`
|
||||||
| Rclone RC API `operations/list` returns empty list with trailing slash, works... | skymirror/transfer | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Rclone RC API `operations/list` returns empty list with trailing slash, works without
|
||||||
| Root cause: `effectivePath` for accounts with `base_path` produced trailing s... | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Root cause: `effectivePath` for accounts with `base_path` produced trailing slash (e.g., `Snarveier/`)
|
||||||
| `https://` stripped from server URLs in labels | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
`https://` stripped from server URLs in labels
|
||||||
| Normal case labels (not uppercase) | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Normal case labels (not uppercase)
|
||||||
| Order: GDrive regular → GDrive shared → NC regular → NC fellesdisk | skymirror/storage | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Order: GDrive regular → GDrive shared → NC regular → NC fellesdisk
|
||||||
| Nextcloud: regular accounts grouped by server+username, fellesdisker in separ... | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Nextcloud: regular accounts grouped by server+username, fellesdisker in separate groups after
|
||||||
| Google Drive: regular accounts grouped by email, shared drives in separate gr... | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Google Drive: regular accounts grouped by email, shared drives in separate groups after
|
||||||
| Click-outside-to-close behavior | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Click-outside-to-close behavior
|
||||||
| Items indented under headers without redundant icons or email | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Items indented under headers without redundant icons or email
|
||||||
| Provider icons (Google Drive img / Nextcloud FA cloud) on group headers | skymirror/storage | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Provider icons (Google Drive img / Nextcloud FA cloud) on group headers
|
||||||
| Replaced native `<select>` with custom dropdown component in Toolbar.vue | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Replaced native `<select>` with custom dropdown component in Toolbar.vue
|
||||||
| Font Awesome 6 Free requires `fa-solid` for solid icons to render | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Font Awesome 6 Free requires `fa-solid` for solid icons to render
|
||||||
| FileTreeRow.vue `<i>` element was missing `fa-solid` class prefix | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
FileTreeRow.vue `<i>` element was missing `fa-solid` class prefix
|
||||||
| File tree and status bar now render correctly | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
File tree and status bar now render correctly
|
||||||
| Added `display: flex !important; flex-direction: column !important;` to `.pag... | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
Added `display: flex !important; flex-direction: column !important;` to `.page-content:has(#vue-file-manager)`
|
||||||
| `.page-content` was not a flex container, so `#vue-file-manager` with `flex: ... | general | pattern | info | HANDOFF-file-manager-dev2.md | 100 | 2026-02-24 |
|
Body:
`.page-content` was not a flex container, so `#vue-file-manager` with `flex: 1` collapsed to 0 height
|
||||||
| Deep compare ikke implementert ennå — kun masterplan klar | general | incident | medium | HANDOFF-009-260224-file-manager-dev9.md | 100 | 2026-02-24 |
|
Body:
Deep compare ikke implementert ennå — kun masterplan klar
|
||||||
| Transfer progress percent er 0 for raske overføringer (< 3 sek) — MonitorTran... | skymirror/transfer | incident | medium | HANDOFF-009-260224-file-manager-dev9.md | 100 | 2026-02-24 |
|
Body:
Transfer progress percent er 0 for raske overføringer (< 3 sek) — MonitorTransferJob rekker ikke oppdatere stats, men status skifter korrekt til `completed`
|
||||||
| SyncStatus type: — `match_elsewhere` lagt til som foundation for deep compare | skymirror/transfer | pattern | info | HANDOFF-009-260224-file-manager-dev9.md | 100 | 2026-02-24 |
|
Body:
**SyncStatus type** — `match_elsewhere` lagt til som foundation for deep compare
|
||||||
| Deep Compare masterplan: — Arkitekt laget masterplan for cross-account duplic... | general | pattern | info | HANDOFF-009-260224-file-manager-dev9.md | 100 | 2026-02-24 |
|
Body:
**Deep Compare masterplan** — Arkitekt laget masterplan for cross-account duplicate finder
|
||||||
| Auto-refresh destpanel: — Når transfer er `completed`, bumpes `destRefreshTri... | skymirror/transfer | pattern | info | HANDOFF-009-260224-file-manager-dev9.md | 100 | 2026-02-24 |
|
Body:
**Auto-refresh destpanel** — Når transfer er `completed`, bumpes `destRefreshTrigger` → FilePanel refresher (skip cache)
|
||||||
| Transfer progress polling: — Etter Copy/Sync starter systemet polling av `/ap... | skymirror/transfer | pattern | info | HANDOFF-009-260224-file-manager-dev9.md | 100 | 2026-02-24 |
|
Body:
**Transfer progress polling** — Etter Copy/Sync starter systemet polling av `/api/transfers/{id}/progress` hvert 2. sekund
|
||||||
| Nextcloud username i dropdown/header: — Toolbar trigger og panel-overskrift v... | general | pattern | info | HANDOFF-009-260224-file-manager-dev9.md | 100 | 2026-02-24 |
|
Body:
**Nextcloud username i dropdown/header** — Toolbar trigger og panel-overskrift viser nå `admin@nc.nativja.no` i stedet for bare `Nextcloud Nativja · nc.nativja.no`
|
||||||
| `_test_wildcard` folder was created during debugging on Nextcloud — cleaned up | general | incident | high | HANDOFF-015-260225-file-manager-dev13.md | 100 | 2026-02-25 |
|
Body:
`_test_wildcard` folder was created during debugging on Nextcloud — cleaned up
|
||||||
| `-1 B` size display for Google Docs files — could show "Google Doc" instead | general | incident | medium | HANDOFF-015-260225-file-manager-dev13.md | 100 | 2026-02-25 |
|
Body:
`-1 B` size display for Google Docs files — could show "Google Doc" instead
|
||||||
| Google Docs with download restrictions cannot be copied (Google Drive limitat... | general | incident | medium | HANDOFF-015-260225-file-manager-dev13.md | 100 | 2026-02-25 |
|
Body:
Google Docs with download restrictions cannot be copied (Google Drive limitation)
|
||||||
Ingestion History
Loading…