KB: skymirror
← All workspaces4101 results — page 8 of 83
| Title | Domain | Type | Severity | Source | Freshness | Updated |
|---|---|---|---|---|---|---|
| The SFTP remote is persistent in `rclone.conf` (named `sftp-{nc-remote-name}`) | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| SFTP rclone remote created dynamically alongside the existing WebDAV remote (dual-remote pattern) | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| SFTP config stored in the `cloud_accounts` table (new columns) -- NOT a separate model | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| **Key design decisions:** | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| Nextcloud transfers via WebDAV are slow (7-10 MB/s) because WebDAV is PHP-based with high per-fil… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
verhead. This feature adds SFTP as an alternative transfer protocol for Nextcloud accounts. SFTP writes directly to the filesystem and can achieve 80-100+ MB/s. After SFTP transfer, `occ files:scan` is executed on the Nextcloud server via SSH to index the new files.
|
||||||
| **Algorithm:** Two `listRecursive()` calls, build name+size index Maps, classify each file. | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
Cap at 5000 files per side (HTTP 422 if exceeded).
|
||||||
| **UI change:** The compare-level `<select>` moves from the Toolbar into the OptionsModal (kebab m… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
-> "Alternativer"). The Toolbar keeps only a single Compare button that triggers deep compare directly.
|
||||||
| **New statuses:** `match` (same path), `match_elsewhere` (same file, different path), `source_onl… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
`dest_only`. The `mismatch` status is retained but not produced by deep compare.
|
||||||
| Replace the shallow compare (immediate children, same path, name-only matching) with a recursive… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
ss-account compare that finds duplicates anywhere in the tree.
|
||||||
| **Delta Sync & Freshness** -- Post-transfer invalidation, manual refresh, TTL tuning | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| **Fast API Layer** -- Rewrite controllers to DB-first with rclone fallback | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| **Foundation** -- Migration, model, repository, indexer job | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| **Three phases, all in this masterplan:** | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| This masterplan introduces a **persistent metadata database** (`file_metadata` table in MariaDB)… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
ulated by a background indexer job. All browse, metadata, and compare endpoints are rewritten to read from the database first, with rclone as a fallback for un-indexed accounts. The result: folder browsing in <100ms, folder sizes in <10ms, and deep compare in <500ms.
|
||||||
| Skymirror's file browser currently makes synchronous rclone RC API calls for every listing, folde… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
ize, and deep compare operation. A single folder metadata request triggers a full recursive listing via the remote cloud API (Google Drive / Nextcloud), taking 5-60 seconds per folder. Deep compare requires two parallel recursive listings and regularly hits the 30-second timeout for large trees.
|
||||||
| Font Awesome Pro 6 via Kit (CDN), Google/Nextcloud brand SVGs as inline Blade components | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| Dark/light mode via Tailwind CSS v4 `@custom-variant` and CSS custom properties | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| Polling-based progress updates (every 2 seconds via `/api/transfers/{id}/progress`) -- simpler th… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
WebSockets for MVP
|
||||||
| Alpine.js provides reactive UI components (file browser, transfer wizard, progress tracker) | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| Laravel communicates with rclone via HTTP POST (Guzzle/Http facade) to the RC API | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| rclone runs as a systemd service (`rclone rcd`) on localhost:5572 with `--rc-no-auth` (local-only… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
cess)
|
||||||
| **Key design decisions:** | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| **Architecture:** Laravel 12 (PHP 8.3) + Alpine.js + Tailwind CSS v4 frontend, with an `RcloneSer… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
e` wrapping rclone's HTTP RC API. MariaDB stores cloud accounts, transfer tasks, and transfer history. No authentication required (single-user, internal tool).
|
||||||
| Skymirror is a cloud-to-cloud file synchronization application built on Laravel 12 with rclone as… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
e backend engine. The MVP delivers a beautiful two-panel file browser UI (inspired by MultCloud/CloudHQ) that lets users copy files from Google Drive to Nextcloud. Laravel provides the UI layer, task management, and progress tracking, while rclone (running as a daemon on localhost:5572) handles all cloud storage operations via its JSON RC API.
|
||||||
| **Technology stack additions:** Vue 3.5+, Pinia (state), TanStack Virtual (virtualization), idb-k… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
al (IndexedDB), @vueuse/core (utilities).
|
||||||
| Alpine.js continues running on all other pages. | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
The two frameworks coexist on separate DOM trees. Existing `api.js` and `format.js` helpers are reused directly.
|
||||||
| This masterplan replaces the transfer page's file browser with a Vue.js 3 application mounted int… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
dedicated Blade template. The Vue app provides two panels (source/destination) with virtual-scrolled tree views, draggable split divider, sortable/resizable/hideable columns, folder metadata enrichment, multi-level sync checking, full file operations (mkdir, rename, move, copy, safe delete), IndexedDB caching with stale-while-revalidate, and persistent settings.
|
||||||
| Skymirror's current Alpine.js file browser is architecturally incapable of supporting the require… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
ual-panel file manager with virtual scrolling, tree view, column resizing, sync comparison, and file operations. An explore analysis (EX-0001) confirmed this conclusion and recommended Vue.js 3 with gradual migration (Perspective 4).
|
||||||
| The feature adds a new onboarding flow: upload SA JSON file, specify domain, discover/select user… | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
then auto-create one CloudAccount per user (My Drive) plus one per shared drive. rclone handles the rest via `service_account_file` + `impersonate` parameters.
|
||||||
| **magitek.no** -- 2 user accounts | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| **nativja.no** -- 4 user accounts | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| **Two domains targeted initially:** | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
|
||||||
| Add support for Google Workspace domains via Service Account + Domain-Wide Delegation (DWD). | skymirror | lesson | medium | MASTERPLAN.md | 97 | 2026-03-20T02:00:42Z |
|
Body:
This allows Skymirror to impersonate any user in a Google Workspace domain using a single JSON key file, without individual OAuth flows per user.
|
||||||
| [Workflow] SKILL: Dashboard | claude/commands/SKILL | pattern | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
All gaps visible at: https://syncrovanis.magitek.no/gaps
|
||||||
| [Workflow] SKILL: After Logging (MANDATORY) | claude/commands/SKILL | pattern | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
Tell the user:
> **GAP logged:** {GAP-NNN} [{priority}] {title} -> {workspace}
|
||||||
| [Tool usage] SKILL: Valid Enums | claude/commands/SKILL | api_note | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
**syncrovanis types:** bug, feature, quality, docs, performance
**mcp-servers types:** gap, error, perf, ux, bug, feature, quality, docs, performance
**Priority:** critical, high, medium, low
To see all current enums: `~/.claude/lib/gap-cli.sh enums`
|
||||||
| [Tool usage] SKILL: Workspace Routing | claude/commands/SKILL | api_note | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
Decide which workspace to post to based on WHERE the issue lives:
| Issue relates to... | Workspace | Example components |
|---------------------|-----------|-------------------|
| Syncrovanis engine/pipeline/dashboard | syncrovanis | L0, L1, L2, L3, KB, dashboard, pipeline, logging, state, boilerplate, guardrail |
| MCP server tools/functionality | mcp-servers | tools, translations, fields, deploy, graphql, cache, diagnostics, admin, relationships, extensions, build, docs, audit, manifest,...
|
||||||
| [Tool usage] SKILL: How to Log — gap-cli.sh | claude/commands/SKILL | api_note | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
**Step 1: Always search for duplicates FIRST:**
```bash
~/.claude/lib/gap-cli.sh search --workspace {ws} --query "short description"
```
**Step 2a: If duplicate found — add occurrence (bumps impact score):**
```bash
~/.claude/lib/gap-cli.sh occurrence --workspace {ws} --gap-id GAP-NNN --note "Seen again: {context}"
```
**Step 2b: If new — add gap:**
```bash
~/.claude/lib/gap-cli.sh add \
--workspace {ws} \
--title "Short descriptive title" \
--priority {critical|high|medium|low} \
...
|
||||||
| [Tool usage] SKILL: When NOT to Log | claude/commands/SKILL | api_note | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
- You are fixing the issue right now (no need to track)
- One-off operation that will never recur
- Issues with third-party tools (Serena, Playwright, Context7) — use `_discovery-logging` instead
- Trivially simple things the user can just do
|
||||||
| [Tool usage] SKILL: When to Log (Automatic Triggers) | claude/commands/SKILL | api_note | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
Log BEFORE completing your task when you:
- Find a bug you cannot fix in current scope
- Encounter missing MCP tool functionality (fell back to SSH/bash)
- Discover a quality issue or technical debt worth tracking
- Notice a feature request surfaced during work
- Find a pipeline/engine issue in Syncrovanis
- Detect a missing or broken tool in an MCP server
|
||||||
| [Workflow] SKILL: GAP Tracking — Log Issues to SQLite | claude/commands/SKILL | pattern | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
When you discover a bug, quality issue, missing functionality, or performance problem
during your work — and it is NOT something you can fix right now — log it as a GAP.
|
||||||
| [Workflow] SKILL: Instructions | claude/commands/SKILL | pattern | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
1. Resolve the project root (the current working directory) and run:
```bash
.claude/switch-mcp.sh lighthouse
```
If `.claude/switch-mcp.sh` does not exist in the current project, check `/var/www/reportmaker/.claude/switch-mcp.sh` as fallback.
2. Inform the user that Lighthouse will be enabled on next restart.
3. Ask the user if they want to restart now with `/restart` or `/exit`.
|
||||||
| [Workflow] SKILL: If No Expert File Exists | claude/commands/SKILL | pattern | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
1. Note in response
2. Proceed with manual exploration
3. Consider creating handoff: `coordination/experts/handoffs/HANDOFF-{domain}-{date}-{agent}.md`
|
||||||
| [Workflow] SKILL: Expert File Content | claude/commands/SKILL | pattern | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
Each expert file contains:
- Quick reference (key files, classes, methods)
- Database schema
- Known gotchas and bugs
- Integration points
- Data flow diagrams
|
||||||
| [Tool usage] SKILL: Expert File Locations | claude/commands/SKILL | api_note | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
All in: `coordination/experts/{domain}/`
Current domains:
- `security-audit-system` — security scanning, audit rules
- `findings-templates` — template system, findings management
- `findings-blocks-seo-migration` — block-based findings, SEO
- `web-discovery-verification` — website discovery, verification
- `page-crawler-system` — Puppeteer, web scraping
- `analysis-execution-infrastructure` — analysis runners, queues
- `backend-refactoring-patterns` — service patterns, DI
-...
|
||||||
| [Workflow] SKILL: Alternative Discovery Commands | claude/commands/SKILL | pattern | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
```bash
# List all available expert domains
./coordination/scripts/discover-experts.sh --list
# Match by agent type
./coordination/scripts/discover-experts.sh --agent {your-agent-type}
```
|
||||||
| [Workflow] SKILL: Step 2: Fall back to discover-experts.sh (only if KB returns 0 results) | claude/commands/SKILL | pattern | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
```bash
./coordination/scripts/discover-experts.sh --for-task "your task description"
```
Read ALL matched expert files BEFORE starting work. Token savings: 80-90% vs manual exploration.
|
||||||
| [Tool usage] SKILL: Step 1: Query KB (preferred — faster, fewer tokens) | claude/commands/SKILL | api_note | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
```bash
# Free-text search (ALL workspaces with Laravel):
php artisan kb:query "TOPIC" --limit=5
# Structured lookup (specific file/domain/masterplan):
php artisan kb:context domain:customer-management --limit=5
php artisan kb:context file:app/Services/Example.php --limit=5
# Non-Laravel workspaces (magitek-ops, dam):
vendor/bin/kb query "TOPIC" --limit=5 --project-root=$(pwd)
```
KB returns relevant excerpts AND points to which expert files are most relevant.
**If KB returns useful results...
|
||||||
| [Tool usage] SKILL: Important Limitations | claude/commands/SKILL | api_note | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
- KB gives **direction**, not complete solutions
- Always read the actual files for full context
- If KB returns 0 results → proceed without it (do not block on this)
- Max 5 results — more wastes tokens without benefit
- Skip KB if task is purely administrative (git commits, file moves, etc.)
|
||||||
| [Tool usage] SKILL: Topic Extraction Rules | claude/commands/SKILL | api_note | medium | SKILL.md | 88 | 2026-03-20 02:00:44 |
|
Body:
Extract 1-3 keywords from the task that represent the domain:
- "Fix the analysis queue job" → topic: `analysis queue`
- "Update Proxmox backup policy" → topic: `proxmox backup`
- "Add CSV export for customers" → topic: `customers export`
- "Debug NPM proxy issue" → topic: `npm proxy`
**Keep topics short and specific** — 2-3 words max.
|
||||||
Ingestion History
Loading…