Novolis Docs
novolis-workspaces / design.md

novolis-workspaces design

dotnetworkspacesnovolis

Three libraries, one repo

LibraryOwnsMust not know
**Novolis.Snapshots**Serialize state, snapshot refsTimeline, workspace manifests
**Novolis.Timeline**Graph over snapshot refsFiles, zip, workspace layout
**Novolis.Workspaces**Workspace/project structureBranching graph internals

Adapters (Workspaces.Snapshots, Workspaces.Timeline, Workspaces.Projects.Timeline) compose all three.

On-disk workspace layout

my-workspace/
  .novolis/
    workspace.json
    settings.json
    timeline/          # branch/head/nodes (Timeline.FileSystem)
    snapshots/         # zip blobs (Workspaces.Snapshots)
  projects/
    {folder}/
      project.json
      documents/
      assets/
      outputs/
      cache/
      temp/

Restore rules

  1. Create a safety save point before restore.
  2. Restore working files from the selected zip snapshot.
  3. Preserve .novolis/timeline/ (history is not rolled back with working tree).

Naming (user-facing)

Use: Save Point, Restore Point, Timeline, Branch, Current.

Avoid: Commit, Checkout, Repository, Merge, Rebase.

Platform boundaries

ExistingRelationship
`Novolis.IO.Workspace`Low-level file root for Storage.Json — optional future bridge
`ISnapshotCapableEventStore`Stream compaction — unrelated
`SimulationTimeline<TState>`Tick replay — unrelated

Filesystem

All disk facets use System.IO.Abstractions (IFileSystem) for testability.