---
id: 462c4759-677d-49bb-be01-cf267dbbd106
title: 'Clone docs + repo hygiene after #54 (Dockerfile, wiki/deploy, .gitignore, unset-mode UX)'
state: closed
labels:
- docs
assignees: []
milestone: null
created: 2026-10-27T14:48:05.298412934Z
updated: 2026-10-27T15:53:18.825774275Z
---
Small leftovers from the #54 review — docs and repo hygiene.

1. `Dockerfile:37` still documents the old contract: "set HU13_PUBLIC_ORIGIN to advertise `<origin>/repo.bundle`". It advertises `<origin>/repo.git` now.
2. `.forge/wiki/deploy` does not mention `repo.git` at all, and its env table omits `HU13_PUBLIC_ORIGIN` entirely (flag exists, entrypoint passes it, docs never say so). It also still frames `HU13_CLONE_URL` as "the clone URL advertised on the index", which is now the fallback/mirror label.
3. `.gitignore` has no `/dist`. Since `dist/repo.git` is a 200+-file directory, running `hu13 build . -o dist` in the repo now scatters hundreds of derived files into a tracked-looking path. Add `/dist` (and a `.forge/wiki/deploy` line about building outside the repo).
4. Unset-origin clone block now advertises two clone methods back to back: `git clone repo.git -b <branch>` and `git clone repo.bundle -b <branch>`. `repo.git` is a *path*, not a URL, and the adjacent note "ask the host for its address" reads oddly next to something that looks cloneable. Pick one primary (bundle stays authoritative when unset, per the existing contract) and mention `repo.git` as the served-directory form.
5. `serve::content_type_for` matches `lower.ends_with("/head")`, i.e. any file named `head` anywhere. Match the bare-repo file exactly (`/HEAD`, `info/refs`, `info/packs`, `packed-refs`) to avoid teaching the mime table about arbitrary paths.

Acceptance:
- [ ] Dockerfile + wiki/deploy describe `<origin>/repo.git` and document HU13_PUBLIC_ORIGIN
- [ ] `/dist` ignored
- [ ] unset-origin clone block has one primary method
- [ ] content-type rule anchored to real bare-repo filenames
