A local-first note taking app

Vault integration phase 2: push-only sync engine + change detection master

Add the vault core sync algorithms on top of the phase 1 foundation: - change-detection.ts: split detection into local-only (steady state, no network) and remote-tree (first-open clone only). Removes the per-file remote head-comparison. - engine.ts: VaultSyncEngine. sync() does a one-time remote clone on first mount, then is push-only. Adds per-file openFile() (pull on open) and pushFile() (push on save), so steady-state cost is proportional to what the user touched rather than the whole tree. - move-detection.ts: rename detection by content similarity. - habitat-repo.ts: implement create() via createAutomergeDoc. - types.ts/snapshot.ts: supporting types and snapshot wiring. - App.tsx: TODO to run a top-level sync on first vault mount. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>