Commit 8974189c40

8974189c40ccccc3230d634ee6583eed8df2f93a

parent: 512bbc5228

Verified · cmc

cmc <hello@cleberg.net> · 2026-08-28 03:21 UTC

parity: add the iOS column, split grouped rows, correct retarget

The page claimed retarget exists over ssh/cli. Nothing implements it —
no command, no store method, no template — so the row was wrong in
both columns and is gone; krz/gitbay#46 tracks whether the capability
should exist.

Grouped rows hid real gaps. 'browse, log, blame, search' read as
covered while blame had no command; it is now one row per page or
action, which is what makes a yes checkable.

Adds the iOS column, and rows for the capabilities an audit against the
web's routes turned up: wiki (#48), log at a ref, archive download and
browse-all are web-only because those handlers bypass the registry;
branches, tags and milestone lists have commands but no iOS screen.

Layout: unified · split

Parity.org +103 −58
@@ -1,9 +1,15 @@
1#+title: Parity 1#+title: Parity
2 2
3Which surface can do what. The CLI is the complete interface: every 3Which surface can do what. The CLI is meant to be the complete
4capability exists over SSH, and web writes call the same control 4interface: every capability exists over SSH, and the other surfaces
5commands, so the two cannot drift. This page is updated in the merge 5dispatch the same control commands rather than reimplementing them, so
6request that changes a row. 6they cannot drift. This page is updated in the merge request that
7changes a row.
8
9Three surfaces now: the CLI over SSH, the web, and the iOS client
10(krz/gitbay-ios). A =no= in the cli column is a defect, not a
11preference — it means some surface reached around the registry and
12stranded a capability where only it can reach.
7 13
8* Rule 14* Rule
9 15
@@ -13,80 +19,116 @@ request. Anything whose input is a credential — secrets, mirror
13tokens, API tokens, session minting — stays SSH-only by design: the 19tokens, API tokens, session minting — stays SSH-only by design: the
14web dispatcher refuses =SSHOnly= commands outright. 20web dispatcher refuses =SSHOnly= commands outright.
15 21
22Rows are one page or one action each. Grouped rows hide gaps: an
23earlier version of this page carried "browse, log, blame, search" as a
24single row, which read as covered while blame had no command at all.
25
16* Merge requests 26* Merge requests
17 27
18| capability | ssh/cli | web | 28| capability | cli | web | ios |
19|-----------------------+---------+-----| 29|------------------------+-----+-----+-----|
20| read, diff, commits | yes | yes | 30| read, diff, commits | yes | yes | yes |
21| comment | yes | yes | 31| comment | yes | yes | yes |
22| edit title and body | yes | yes | 32| edit title and body | yes | yes | yes |
23| review (approve etc.) | yes | yes | 33| review (approve etc.) | yes | yes | yes |
24| resolve a thread | yes | yes | 34| resolve a thread | yes | yes | yes |
25| merge (all strategies)| yes | yes | 35| comment on a diff line | yes | no | yes |
26| close | yes | yes | 36| merge (all strategies) | yes | yes | yes |
27| create | yes | yes | 37| close | yes | yes | yes |
28| create from a fork | yes | no | 38| create | yes | yes | yes |
29| comment on a diff line| yes | no | 39| create from a fork | yes | no | yes |
30| retarget | yes | no | 40| milestone | yes | yes | no |
41
42Diff-line comments are the one place the web trails: krz/gitbay#44.
43Creating from a fork works anywhere the source can be typed as
44=owner/name:branch=; only the web lacks it.
31 45
32* Issues 46* Issues
33 47
34| capability | ssh/cli | web | 48| capability | cli | web | ios |
35|---------------------+---------+-----| 49|---------------------+-----+-----+-----|
36| read, list, filter | yes | yes | 50| read, list, filter | yes | yes | yes |
37| create | yes | yes | 51| create | yes | yes | yes |
38| comment | yes | yes | 52| comment | yes | yes | yes |
39| edit title and body | yes | yes | 53| edit title and body | yes | yes | yes |
40| close and reopen | yes | yes | 54| close and reopen | yes | yes | yes |
41| labels, assignees | yes | yes | 55| labels, assignees | yes | yes | yes |
42| milestone | yes | yes | 56| milestone | yes | yes | yes |
57| milestone list | yes | yes | no |
43 58
44* Repositories 59* Repositories
45 60
46| capability | ssh/cli | web | 61| capability | cli | web | ios |
47|---------------------------+---------+-----| 62|-----------------------------+-----+-----+-----|
48| browse, log, blame, search| yes | yes | 63| browse files | yes | yes | yes |
49| create | yes | yes | 64| read a file | yes | yes | yes |
50| edit a file | yes | yes | 65| commit log | yes | yes | yes |
51| pin | yes | yes | 66| commit log at a ref | no | yes | no |
52| settings, protection | yes | yes | 67| one commit with its patch | yes | yes | yes |
53| topics, website | yes | yes | 68| blame | yes | yes | yes |
54| visibility | yes | yes | 69| search file contents | yes | yes | yes |
55| archive | yes | yes | 70| branches and tags | yes | yes | no |
56| delete, transfer | yes | no | 71| wiki | no | yes | no |
57| release create, edit | yes | yes | 72| download an archive | no | yes | no |
58| build trigger | yes | yes | 73| edit a file | yes | yes | yes |
59| release delete | yes | no | 74| create | yes | yes | yes |
75| pin | yes | yes | yes |
76| settings, protection | yes | yes | yes |
77| topics, website | yes | yes | yes |
78| visibility | yes | yes | yes |
79| archive (read-only flag) | yes | yes | yes |
80| release list, show | yes | yes | yes |
81| release create, edit | yes | yes | yes |
82| build list, log | yes | yes | yes |
83| build trigger | yes | yes | yes |
84| delete, transfer | yes | no | no |
85| release delete | yes | no | no |
86
87Four rows here are web-only because the handler reads git or the store
88directly instead of dispatching a command: wiki (krz/gitbay#48), log at
89a ref, and archive download. Blame and file editing were in the same
90state until krz/gitbay!99 gave them commands.
91
92* Discovery
93
94| capability | cli | web | ios |
95|-------------------------------+-----+-----+-----|
96| search repositories | yes | yes | yes |
97| browse all public repositories| no | yes | no |
98| profile page | yes | yes | yes |
99| activity feed | yes | yes | yes |
100
101=repo search= needs a query, so there is no browse-all outside the web.
60 102
61* Accounts 103* Accounts
62 104
63| capability | ssh/cli | web | 105| capability | cli | web | ios |
64|----------------------------+---------+-----| 106|-----------------------------+-----+-----+-----|
65| SSH keys: list, add, remove| yes | yes | 107| SSH keys: list, add, remove | yes | yes | yes |
66| PGP keys: list, add, remove| yes | yes | 108| PGP keys: list, add, remove | yes | yes | yes |
67| email add and verify | yes | yes | 109| email add and verify | yes | yes | yes |
68| dashboard aggregate | yes | yes | 110| dashboard aggregate | yes | yes | yes |
69| activity feed | yes | yes | 111| API token mint | yes | no | no |
70| API token mint | yes | no | 112| account export bundle | yes | no | no |
71| account export bundle | yes | no |
72 113
73* Organizations 114* Organizations
74 115
75| capability | ssh/cli | web | 116| capability | cli | web | ios |
76|---------------------------+---------+-----| 117|---------------------------+-----+-----+-----|
77| read members and teams | yes | yes | 118| read members and teams | yes | yes | yes |
78| members add, remove, role | yes | yes | 119| members add, remove, role | yes | yes | yes |
79| teams create, delete | yes | yes | 120| teams create, delete | yes | yes | yes |
80| team members | yes | yes | 121| team members | yes | yes | yes |
81| team repo grants | yes | yes | 122| team repo grants | yes | yes | yes |
82| create, rename, delete | yes | no | 123| create, rename, delete | yes | no | no |
83 124
84* Pagination 125* Pagination
85 126
86=issue list=, =mr list=, =repo list=, and =feed= take =--limit <n>= 127=issue list=, =mr list=, =repo list=, and =feed= take =--limit <n>=
87and =--cursor <c>=. Cursors are opaque; each page carries the next 128and =--cursor <c>=. Cursors are opaque; each page carries the next
88one. Without the flags a list stays complete, so existing scripts are 129one. Without the flags a list stays complete, so existing scripts are
89unchanged. The web renders server-side and does not paginate. 130unchanged. The web renders server-side and does not paginate; iOS
131pages with the cursors.
90 132
91* SSH only, by design 133* SSH only, by design
92 134
@@ -94,3 +136,6 @@ Build secrets, mirror configuration and tokens, custom domain claims,
94API token minting, web session minting, deploy keys, account and 136API token minting, web session minting, deploy keys, account and
95instance administration. Deleting or transferring a repository is also 137instance administration. Deleting or transferring a repository is also
96CLI-only: both want a typed confirmation, not a button. 138CLI-only: both want a typed confirmation, not a button.
139
140These are the only rows where a =no= is intended. Everywhere else a
141=no= is work outstanding.