Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

A free and open-source forge that lives in your Git repo.

Phase 7 slice 1: review on the web, so approving does not start with a clone

78912785b00227cffe3f8fb26b057cd60159a6b4 · Keenan Nemetz · 17d ago · parent 9bea7f11

Phase 7 slice 1: review on the web, so approving does not start with a clone

Phase 7 is re-scoped: signing is deferred (the SSH handshake already establishes
who pushed, and there is no third-party verifier here), and the phase is now about
the experience of using the forge.

- GET /r/<repo>/commit/<sha>: a commit's metadata and the patch it introduced,
  per-file hunks with line numbers; the commit list links to it
- change requests show the same diff, computed three-dot: a review is what the
  branch adds since it diverged, not every commit main gained meanwhile
- diffs are capped at 512 KiB and labelled when cut, binary files are named
  rather than faked, and every line is escaped (a <script> line is a test)
- the repository README renders on its home page and markdown blobs render as
  markdown, through the sanitiser issues already use

README.md +9−4

@@ -41,7 +41,8 @@ Working today:
41 41 - Issues and change requests stored as files in the repository on the `vole`
42 42 branch, validated at push time and rendered read-only on the web
43 43 - Review as a git artifact: an approval names the exact commit it reviewed, and
44 `git push` is the merge, gated by `pre-receive`
44 `git push` is the merge, gated by `pre-receive`. The web shows the review: a commit
45 page with its patch, and a change request with the diff that would land
45 46 - CI: workflows in `.vole/workflows/*.yaml`, validated by the push that introduces
46 47 them. A push queues jobs; `vole runner` leases one over SSH with the same key, runs
47 48 the shell steps, heartbeats and reports the log. Protected branches can require
@@ -59,7 +60,9 @@ Working today:
59 60 - An instance ed25519 key generated at first boot (used for metadata signing in
60 61 Phase 7)
61 62
62 Not yet: workflow artifact uploads, signature verification, LFS locking.
63 Not yet: workflow artifact uploads, LFS locking. Signature verification is deferred,
64 not planned: the SSH handshake already establishes who pushed, so signing approvals
65 would restate it for a verifier this deployment does not have (see the roadmap).
63 66
64 67 ## Try it
65 68
@@ -162,8 +165,10 @@ vole request approve <id> --as <your-name>
162 165 git push origin feature:refs/heads/main
163 166 ```
164 167
165 The push is refused unless the new tip *is* the approved commit, or is a merge
166 whose parents are the branch tip and the approved commit. That second shape is why
168 The request page shows what would land — the diff against the merge base, the CI
169 checks for the head, and who has approved which commit — so a review does not start
170 with a clone. The push is refused unless the new tip *is* the approved commit, or is a
171 merge whose parents are the branch tip and the approved commit. That second shape is why
167 172 "merge, then push" works while "append a commit and call it approved" does not.
168 173
169 174 ```sh