When the filesystem natively supports editions, version-control tools stop owning working trees, object stores that duplicate file bytes, and destructive checkouts. They shrink to a graph orchestrator plus semantic merge.
Until editions exist in the VFS, concurrency still needs a layered userspace stack. These tiers are complementary, not competing products:
-
Process-scoped mount / path virtualization — each IDE, agent, or build runner sees a stable logical root (e.g.
/workspace) mapped to its revision, without changing absolute paths apps hard-code. -
Working-copy-as-revision graph (operation-log engines in the spirit of Jujutsu) — uncommitted edits are anonymous revisions; no fragile single index; conflicts can be first-class graph state.
-
Copy-on-write storage and content-addressable caches — reflinks / OverlayFS / APFS clones plus shared dependency stores so concurrent workspaces are cheap.
-
Headless agent sandboxes — ephemeral namespaces attached to distinct heads; success reparents; failure drops without touching the human workspace.
Git worktrees address only “more than one checkout.” GitButler-style virtual branches address hunk assignment in one working directory. Neither fully solves path stability, agent isolation, and cheap multi-workspace storage together. Phase A is the honest interim architecture.
With editions:
-
Creating a “branch” requests a new edition id on a directory.
-
“Commit” / tag marks a point-in-time edition state in the connectome graph.
-
Rebase- and cherry-pick-like remapping lean on CoW extent operations rather than userspace read/diff/write pipelines over a single live tree.
-
The VCS no longer needs a shadow copy of every blob in
.git/objectsfor the working tree itself (history metadata and remote sync remain product concerns).
Filesystems operate on extents, blocks, and bytes. They do not understand language ASTs.
-
Semantic three-way merge — conflict presentation can surface conflicting editions; resolving code meaning stays in merge engines.
-
Non-filesystem state leaks — daemons, sockets, global lockfiles,
/tmp, and shared compiler services bypass folder isolation. Process boundaries remain necessary regardless of how rich the tree model becomes.