Three capabilities exist only in the browser, each for the same reason: the handler reads git or the store directly instead of dispatching a command. Grouping them because the cause and the fix are the same shape.
| capability | web route | why it is web-only |
|---|---|---|
| commit log at a ref | /{owner}/{repo}/log/{ref} |
repo log takes --limit and --path only; it always reads the default branch |
| download an archive | /{owner}/{repo}/archive/{file} |
no command produces a tarball |
| browse all public repositories | /explore |
repo search requires a query, so there is no listing without one |
Proposed shapes:
repo log <owner/name> [--ref <r>]— the flagrepo tree,repo catandrepo blamealready take, defaulting to the default branch as now. Smallest of the three, and the most obviously missing: browsing a ref then asking for its history is an ordinary move.repo archive <owner/name> [--ref <r>] [--format tar.gz|zip]— writes the archive to stdout, asrelease asset getdoes. Note the name collides with the existingrepo archive(the read-only flag);repo downloadorrepo tarballavoids that, or the flag pair could becomerepo settings archived on|offand free the name.repo list --allorexplore [--limit n] [--cursor c]— the public listing, paginated like the other lists.
The archive naming collision is worth deciding before anything is written; I have no strong preference between the options.
Found auditing iOS parity against the web's routes. With #48 (wiki) these are the last four rows where the web can do something no other surface can.
closed by commit ec82c4bca9 by cmc: control: repo log --ref, repo download, explore
2026-08-28 03:48