Repository navigation
docs(saiph): design Saiph, a Scion-style VCS (RIG-5665) - #48
rigel-mintaka wants to merge 4 commits into
Conversation
|
Rigel public design docs preview: https://compass-vcs-rig-5665-interna.docs-2ui.pages.dev Deployed from |
|
Review note at head
|
| The record is written against each recommendation. OQ-2 depends on OQ-1. | ||
| OQ-3 depends on OQ-4. | ||
|
|
||
| **OQ-1. What is the store?** |
There was a problem hiding this comment.
C, full Scion impl. Compass will be multi server and multi Runner in future. the one Server is just for dev dogfood.
Should we split the VCS out into it's own project though? or keep it within Compass? Not sure.
Leaning towards splitting it out and just making Compass natively use it. We need to make a product name for it.
We'll also need to design the CI/CD alongside it, can collect research on the best ways to do that thru the Scion post, how Twigg is doing CI, Google's CI/CD. We should put an emphasis on using k8s for this as well.
There was a problem hiding this comment.
Noted: full Scion design, with many Servers and Runners. The split and the product name are now round-2 questions R2-1 and R2-2 in RIG-5821. I recommend a separate repo. CI/CD gets its own record in the set, with research on Scion, Twigg, Google TAP, and k8s engines underway.
| **Recommendation:** (a). Compass runs one Server. The Scion gains we want | ||
| come from where checks and refs live, not from the object format. | ||
|
|
||
| **OQ-2. What does an agent work in?** (depends on OQ-1) |
There was a problem hiding this comment.
What does Scion use? I want to mirror Scion as much as possible across the entire impl.
There was a problem hiding this comment.
Scion's client keeps a bounded local object cache, plus sparse and virtual checkouts fed by a node daemon and a cache tier. Negotiation is want-only: trees are fetched recursively, then blobs. Changesets, commits, rebases, and merges all happen on the server. The rewrite mirrors this. Whether the agent client is jj with a custom backend (as Google does for Piper) or our own client is a round-3 question, after research.
| a shallow repo. jj does not support partial (blob-filtered) clones | ||
| (jj-vcs/jj issue #8920), so a fill is shallow in history but full in files. | ||
|
|
||
| **OQ-3. How does a PR branch follow a base move?** (depends on OQ-4) |
There was a problem hiding this comment.
I think we just make the git mirror the trunk branch, all PRs (if we even call them PRs) don't get mirrored.
We can rethink the entire VCS flow here we're not bound by git-isms. I want to use Scion as much as possible as the reference impl, with Twigg/Piper/Critique as the inspirations for some of the UIs and workflows.
There was a problem hiding this comment.
Noted: trunk-only mirror, no git ideas, Scion as the reference implementation.
| the PR records the result. If GitHub refuses, use (a). A change's own | ||
| workflow edits are refused in every option (D4). | ||
|
|
||
| **OQ-4. What is the review unit?** |
There was a problem hiding this comment.
Same model as Critique/Twigg/jj. Easily able to stack changes ontop of each other, creating stack graphs. Not bound by linear stacks like GitHub.
The CI implementation ontop of the VCS can take advantage of all of this.
There was a problem hiding this comment.
Noted: graph stacks (Critique/Twigg/jj), with CI built on them. The review record will define changes, versions, stack graphs, threads, and approvals.
|
|
||
| **Named decisions this record introduces:** D1–D4 in [Decisions](#decisions). | ||
|
|
||
| Length: the record is about 3,100 prose words. The excess over the |
There was a problem hiding this comment.
This is a very large concept, the length bounds do not apply for this, and it can be split into multiple docs in a directory hierarchy as needed.
There was a problem hiding this comment.
Noted: the length bound is dropped. The proposed layout is one directory with an overview and per-area records (R2-3 in RIG-5821).
| and it keeps red → green inside one PR. Twigg versions still exist in the | ||
| store. | ||
|
|
||
| **OQ-5. What GitHub egress does an agent keep?** |
There was a problem hiding this comment.
When fully implemented, and not needing Compass agents to work on any git repos, none. Compass agents will only use this VCS. the git/GitHub mirroring feature is only for people wanting to migrate existing repos, making a product or codebase more accessible to users (we'd keep Compass repo full mirrored for example).
There was a problem hiding this comment.
Noted: a native repo has no GitHub egress. Mirroring is for migration and public visibility, and Compass stays fully mirrored.
| (RIG-5558 T9). Dropping `github.com` is defense in depth: it also stops | ||
| reads that skip the Server. | ||
|
|
||
| **OQ-6. How does this order against RIG-5558?** |
There was a problem hiding this comment.
We need to retain compatibility with git repos, for users who want to partially cutover to Compass, try it out, etc. We'll need to maintain two VCS backends basically, one for regular git users that uses the git mirrors approach, and one that connects to this new VCS. So 5558 proceeds, and becomes the backend of the VCS tools for any repo that remains on GitHub/git, this new VCS is the replacement that we'll cutover to when it's ready for our repos, and then offer to users as a feature.
There was a problem hiding this comment.
Noted: OQ-6 → (a). RIG-5558 ships whole as the git backend, and the native VCS is a second backend. I've told compass-agent; nothing in its protocol, migrations, or decisions changes.
| - a version moves by compare-and-swap on one Postgres row; | ||
| - the only advertised ref is trunk. | ||
|
|
||
| Not taken: Scion's Server-created commits (here the agent's jj creates |
There was a problem hiding this comment.
I think we should take all of it.
There was a problem hiding this comment.
Noted: take all of it.
Server-held change store grown from the RIG-5558 T10 mirror; agents fill and sync jj only from the Server; GitHub stays the mirror and landing path. Files DL-578..DL-581. Six open questions for Matt. Refs RIG-5665 Co-authored-by: Matt Wilkinson <matt@rigel.build>
…RIG-5665) Per Matt's round-1 rulings on docs#48: a full Scion-style native VCS as a second backend beside RIG-5558. Replaces internal-vcs.md. Co-authored-by: Matt Wilkinson <matt@rigel.build>
…D, git bridge (RIG-5665) Moves the set to its own surface, docs/designs/saiph, per Matt (RIG-5821): Saiph is its own product and repo. Files DL-590..DL-626 and moves DL-578..DL-581. Co-authored-by: Matt Wilkinson <matt@rigel.build>
11d6253 to
184000c
Compare
Summary
This is the design set for Saiph, Rigel's own version-control system. It follows Scion closely (Redesigning source control at Anthropic). Saiph is its own product and will live in its own repo, RigelBuild/saiph. Compass is its first client, and RIG-5558 continues unchanged as the git backend.
The set lives at
docs/designs/saiph/:README.mdstore.mdsaiph.v1API, the metadata database, tenancy, ACLs, and deviations from Scionclient.mdsaiphCLI,saiphddaemon andsaiph-cache; want-only fetch; sparse and virtual checkouts; tokens; agent toolsreview.mdmerge-queue.mdci-cd.mdsaiph-cion k8s Jobs, presubmit and postsubmit, TAP-style culprit finding, Rapid-style CD, and the REAPI cachegit-bridge.mdLedger
internal-vcs.md(the first draft) is deleted.Rulings folded in
From Matt, recorded in RIG-5821:
Status
Draft, not ready to merge. The open questions are indexed in
README.md. The load-bearing ones must be answered before the record freezes.Preview: https://compass-vcs-rig-5665-interna.docs-2ui.pages.dev/designs/saiph/readme/
Gates
rumdlis clean on 48 files.design-ledger-gateis OK.ref-gateis clean.