# vcs spec (draft 2, October 27, 2026) `vcs` is a placeholder name. The real name comes before the public preview. vcs is open-source version control where nobody waits and nothing gets lost. It has its own model and its own CLI. Git is a bridge in and out, not the foundation. It runs on its own for one person offline, and it gets a server (Upstream, or one you host) when work is shared. Three promises: - **Nobody waits.** Landing is the server's job, so nobody's work is refused because someone else landed first. Making a workspace takes seconds, not a clone and a reinstall. - **Nothing is lost.** Your work saves itself, and `vcs undo` takes back what you did, including a land. A change follows you to another machine, and deleting a workspace folder loses nothing. - **Private where you need it.** A folder can be visible to only some people. Your `.env` files are yours alone, and secrets are checked before anything lands. The plan behind this spec, with the research and the order of work, is `reports/Upstream version control plan Oct 2026.md`. ## 1. The words | Word | Meaning | |---|---| | **change** | One piece of work. It has an ID made of letters (`rtnbkcvx`; the first 4 or more letters are enough) and keeps that ID from start to finish. It holds every save. It replaces git's commit, branch, stash and reflog. | | **main** | The shared line of a project. It only moves when a change lands, and each landing makes a new numbered **version**: main 1, 2, 3 and so on. Numbers are always versions and letters are always changes. | | **land** | Putting a change on main. The server merges it with whatever landed since the change started, runs the project's checks on the exact result, and adds it as the next version. If something conflicts, main doesn't move and you're told exactly where. | | **workspace** | A folder working on one change. You can have as many as you like, and each holds one change at a time. Your work lives in the change, not the folder. | | **save** | A snapshot of a change. Saves happen by themselves, and every save is kept. | There's no staging, no commit command, no branch names and no pull or rebase before landing. ## 2. A day with vcs ``` $ vcs get upstream.codes/acme/shop workspace ~/shop (upstream.codes/acme/shop) change rtnbkcvx new, empty, on main 48190 next: edit files, then vcs land -m "what you did" $ # ...edit src/auth/login.ts... $ vcs land -m "Fix login redirect loop" -m "Why: users with expired sessions bounced between /login and /home. Checked: auth tests pass." landed rtnbkcvx as main 48214 "Fix login redirect loop" merged with 23 versions that landed since main 48190 change qwhmdzst new, empty, on top of what you just landed next: keep working, or vcs sync to bring in others' work ``` Two agents work in parallel by each getting their own workspace: ``` $ vcs get upstream.codes/acme/shop ~/shop-billing $ vcs get upstream.codes/acme/shop ~/shop-search ``` Both land whenever they're ready, in any order. Neither waits for the other or pulls first. ## 3. Commands Four commands cover nearly all work: **get**, **status**, **land** and **sync**. **undo** covers mistakes. | Group | Command | What it does | |---|---|---| | Start | `vcs get [folder]` | Make a workspace for a project. | | | `vcs workspaces [add [--on ] \| clean]` | This project's workspaces on this machine (one per agent): list them, add one next to this one (on main, or on a change that hasn't landed), or remove the ones whose work is done. | | | `vcs init [folder]` | Start a new project that lives only on this machine. | | | `vcs import [folder]` | Make a project from a git repository, with its history. | | | `vcs publish ` | Put a local project on a host. | | | `vcs git [resume]` | Where git clones the project, and whether that git view is current. | | | `vcs login [host]` | Sign in (default host: upstream.codes). | | See | `vcs status [change]` | Where you are and what to do next. | | | `vcs diff [path...]` | What a change changes. | | | `vcs log [version\|change]` | History of main, open changes, saves or operations. | | Work | `vcs new ["title"]` | Start another change. The current one is kept. | | | `vcs describe "text"` | Set the current change's description. | | | `vcs switch ` | Put this workspace on another change. | | | `vcs drop [change]` | Abandon a change. | | Finish | `vcs sync` | Bring the change up to date with main. | | | `vcs land [change]` | Put a change on main. | | Fix | `vcs undo [version]` | Undo the last vcs command in this workspace, or take a landed version back out. | | | `vcs restore ` | Bring files back from an earlier point. | | Share | `vcs access [who...]` | See or set who can see a change or a folder. | | | `vcs group [@person...]` | See or set one of the project's groups. | | | `vcs approve ` | Approve someone else's change; the last approval a project needs lands it. | | | `vcs settings [approvals=N] [git=on\|off]` | See or set the project's host settings: approvals needed to land, and whether main is copied to git. | | | `vcs check` | Check this machine's objects and the host's copy of the project for damage. | | | `vcs rollback --to