Skip to content

Local storage folder + free-tier preset sync (0.4.15-beta)#29

Merged
sKuhLight merged 2 commits into
mainfrom
feature/local-store-free-tier
Jul 3, 2026
Merged

Local storage folder + free-tier preset sync (0.4.15-beta)#29
sKuhLight merged 2 commits into
mainfrom
feature/local-store-free-tier

Conversation

@sKuhLight

Copy link
Copy Markdown
Owner

What

Local storage folder (/local/*): a user-picked root with an app-managed Presets/ .syx library (mtime-cached scans, on-demand reads, safe writes incl. exact-path write-back) and a Sync/ plain-syx mirror of the version store with sha256-verified restore.

Free-tier preset sync: preset versions now sync for every account, reconciled to a target set (newest backup group + newest 5 snapshots, 3 MiB deduped cap) with a prune-guard so downgraded accounts never lose data. Pairs with the axis-cloud quota trigger; paid stays unlimited. Bumps to 0.4.15-beta.

Tests

npm test: 8/8 suites (adds api/local — 13 cases, api/syncplan — 7 plans).

sKuhLight added 2 commits July 3, 2026 18:11
…n-syx mirror

A picked root folder gets two app-managed subfolders, served over /local/*:
Presets/ — recursive .syx scan with an mtime-keyed decode cache (junk .syx
negative-cached), on-demand byte reads, and sanitized or exact-path writes;
Sync/ — an incremental plain-.syx + index.json mirror of the version store
(tool-readable by FM3-Edit/Fractal-Bot), with a sha256-verified restore path
(store.importVersion). Path-traversal-guarded throughout; atomic index writes;
root lives in the never-synced 'local' doc collection.
Free accounts now sync preset versions within server-enforced limits (3 MiB
stored · newest full-backup group · 5 snapshots). The old set-difference push
would re-push pruned rows forever, so free sync reconciles the cloud to a
target set (syncPlan.ts, pure + unit-tested): prune replaced rows first (the
DB trigger demands delete-old-before-new), reference-count blobs by path, and
pre-flight the deduped size before any write. Prune-guard: a downgraded
account never loses data — over-quota pushes are refused, nothing is deleted
silently. Pull stays unlimited. quota() RPC rides /cloud/status. 0.4.15-beta.
@sKuhLight sKuhLight merged commit f4a5fca into main Jul 3, 2026
2 checks passed
@sKuhLight sKuhLight deleted the feature/local-store-free-tier branch July 3, 2026 16:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant