vole
Clone
Read only, no credentials:
https://rodent.software/vole.git
Write over SSH with a registered key:
git clone ssh://git@rodent.software:2222/vole.git
A free and open-source forge that lives in your Git repo.
Docs: rewrite the README and organize the guides
520470e19cd906bd6fff987e2d132d793ce56486 · Keenan Nemetz · 16d ago · parent c5902451
Docs: rewrite the README and organize the guides Replace the long README with a landing page, split feature details into focused guides, and remove the roadmap and spike notes. Update comments that referenced them.
docs/spikes/README.md −37
| @@ -1,37 +0,0 @@ | |||
| 1 | # Spikes | ||
| 2 | |||
| 3 | Throwaway experiments that settle a question before the design depends on it. | ||
| 4 | Each has its own `main.go` and a README with method, measurements, and the | ||
| 5 | decision it produced. Nothing here ships; the code exists to be re-run. | ||
| 6 | |||
| 7 | | Spike | Question | Verdict | | ||
| 8 | |---|---|---| | ||
| 9 | | [ref-cas](ref-cas/README.md) | Can metadata be commits on sidecar refs, and at what rate? | Yes. Sharded + batched: 6,966/s at 2k entities, 25,637/s at 20k. A single ref is 30/s and decays. | | ||
| 10 | | [smart-http](smart-http/README.md) | Is `git http-backend` as a subprocess correct and fast enough? | Yes. Hook messages propagate, aborts are clean. 1 GiB push peaks 1.13 GB RSS — needs a size cap. | | ||
| 11 | | [tree-serving](tree-serving/README.md) | Can sites be served straight from git trees? | Yes. Cold 1.2 ms p50 from git; 170k req/s warm with an 18 MiB cache. No export step needed. | | ||
| 12 | | [archive-streaming](archive-streaming/README.md) | Can release tarballs be generated per request instead of stored? | Yes. Real repo 54 ms plain / 221 ms gzipped, byte-identical across runs and clones. gzip is 14× slower than zstd and its level knob does nothing. | | ||
| 13 | | [issue-frontmatter](issue-frontmatter/README.md) | Is YAML frontmatter a cleaner on-disk format for issues than `meta.json` + `description.md`? | Yes. 25 → 10 changed lines over the same six edits; always-quoting the writer removes the title edge cases instead of policing them. Drop `updated`, which alone was 11 of the 21. | | ||
| 14 | |||
| 15 | Run any of them with: | ||
| 16 | |||
| 17 | ```sh | ||
| 18 | go run ./ref-cas -n 2000 | ||
| 19 | go run ./smart-http -sizemb 1024 | ||
| 20 | go run ./tree-serving -files 10000 -conc 16 -reqs 4000 | ||
| 21 | go run ./archive-streaming -build-fixture /tmp/fix -files 20000 -dirs 200 -binarymb 2 | ||
| 22 | go run ./archive-streaming -repo /tmp/fix -rev HEAD | ||
| 23 | go run ./issue-frontmatter -mode probe | ||
| 24 | go run ./issue-frontmatter -mode diffs | ||
| 25 | go run ./issue-frontmatter -mode diffs -no-updated | ||
| 26 | ``` | ||
| 27 | |||
| 28 | Shared conventions worth keeping if these are ever rewritten: | ||
| 29 | |||
| 30 | - **Verify, don't trust the throughput number.** Every spike ends with a pass | ||
| 31 | that counts what actually landed in the repo. That check caught a harness bug | ||
| 32 | that silently dropped 83% of writes in ref-cas. | ||
| 33 | - **A scenario that can't fail is not a test.** Two smart-http scenarios | ||
| 34 | initially reused objects already on the server, so nothing transferred and the | ||
| 35 | numbers were meaningless. Push to a fresh repo when measuring transfer. | ||
| 36 | - **Label measured vs inferred.** The READMEs say which numbers came from a | ||
| 37 | counter and which are explanations. | ||