Novolis Docs
novolis-workspaces / design.md

novolis-workspaces design

dotnetworkspacesnovolis

Three libraries, one repo

LibraryOwnsMust not know
Novolis.SnapshotsSerialize state, snapshot refsTimeline, workspace manifests
Novolis.TimelineGraph over snapshot refsFiles, zip, workspace layout
Novolis.WorkspacesWorkspace/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.IWorkspaceMandatory typed directory-root contract composed by IProjectWorkspace
Novolis.Workspaces.DotNet.*Physical solution topology, explicit MSBuild evaluation, and portable Roslyn facts
ISnapshotCapableEventStoreStream compaction — unrelated
SimulationTimeline<TState>Tick replay — unrelated

Filesystem

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