import type { Project } from '../model/Project'; export interface ProjectSummary { id: string; name: string; revision: number; updatedAt: string; } export interface LoadedProject { project: Project; revision: number; } /** Thrown by `save` when the server holds a newer revision (edited elsewhere). */ export class StaleRevisionError extends Error { constructor(readonly serverRevision: number) { super(`Project was modified elsewhere (server revision ${serverRevision})`); this.name = 'StaleRevisionError'; } } /** Persistence boundary. The editor only talks to this interface. */ export interface ProjectStore { list(): Promise; load(id: string): Promise; /** Saves the project and returns the new revision. Rejects with StaleRevisionError on conflict. */ save(project: Project, revision: number): Promise; create(name: string): Promise; delete(id: string): Promise; }