Problem
The full git-backed editing stack is built and unit-tested but not wired into the editor. ProjectRepoAdapter (src/services/projectRepo/adapter.ts) + useProjectRepo (src/composables/useProjectRepo.ts) implement draft-branch autosave, .lock + SharedWorker heartbeat, orphaned-draft recovery, and promote-to-main with PR fallback — all dormant.
ProjectEditor.vue imports only useProjectGitSync (one-shot manual save). Its debounced autosave writes only to localStorage (src/views/ProjectEditor.vue:459-512; see the "if/when backed by a ProjectRepoAdapter" comments at ~461 and ~925). acquireLock / heartbeat / checkLockOwnership have no live callers (only the interface + composable reference them).
Work (sub-tasks)
Dependencies
Relations
Problem
The full git-backed editing stack is built and unit-tested but not wired into the editor.
ProjectRepoAdapter(src/services/projectRepo/adapter.ts) +useProjectRepo(src/composables/useProjectRepo.ts) implement draft-branch autosave,.lock+ SharedWorker heartbeat, orphaned-draft recovery, and promote-to-main with PR fallback — all dormant.ProjectEditor.vueimports onlyuseProjectGitSync(one-shot manual save). Its debounced autosave writes only to localStorage (src/views/ProjectEditor.vue:459-512; see the "if/when backed by a ProjectRepoAdapter" comments at ~461and ~925).acquireLock/heartbeat/checkLockOwnershiphave no live callers (only the interface + composable reference them).Work (sub-tasks)
useProjectRepo; acquire lock on mount / release on unmount (adapter.ts:211-234) — Madapter.autosave()(buildProjectStateviabuildProjectState()insrc/overlay/projectState.ts) — MonOrphanedDraft/status === 'lock-lost'(adapter.ts:245-264) — LProjectEditor.vue:515-547) — overlaps feat(deploy): dirty-state gate + save-and-deploy with PR-URL fallback modal #63 — MisDirty) — overlaps feat(deploy): dirty-state gate + save-and-deploy with PR-URL fallback modal #63 — Soverlay.jsonediting: loadstate.overlayfrom the adapter into the existingVariablesTab(currently reads emptyproject.overlay) — SDependencies
POST /v1/projects/{id}/heartbeat, which does not exist server-side — see range42-backend-api#106 (otherwise the worker 404s every 60s once wired).Relations