novolis-workspaces / design.md
novolis-workspaces design
Snapshots and timelines
dotnetworkspacesnovolis
Three libraries, one repo
| Library | Owns | Must not know |
|---|---|---|
| Novolis.Snapshots | Serialize state, snapshot refs | Timeline, workspace manifests |
| Novolis.Timeline | Graph over snapshot refs | Files, zip, workspace layout |
| Novolis.Workspaces | Workspace/project structure | Branching 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
- Create a safety save point before restore.
- Restore working files from the selected zip snapshot.
- 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
| Existing | Relationship |
|---|---|
Novolis.IO.Workspace.IWorkspace | Mandatory typed directory-root contract composed by IProjectWorkspace |
Novolis.Workspaces.DotNet.* | Physical solution topology, explicit MSBuild evaluation, and portable Roslyn facts |
ISnapshotCapableEventStore | Stream compaction — unrelated |
SimulationTimeline<TState> | Tick replay — unrelated |
Filesystem
All disk facets use System.IO.Abstractions (IFileSystem) for testability.