detached 346e37f

docs: correct issue access, limiter and comment docs

commit
346e37f5c6d7b838423d30ea0c9b7a5f83162b65
author
brice · · 2026-10-19 09:01 UTC
parent
e53302b
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
checks
1/4
4 files · +5 -5
M docs/cli.md +1 -1
@@ -88,7 +88,7 @@ Issues need a server with the `issues` feature and `ermite repo edit <repo> --is
8888
8989 ## Output
9090
91-- `--json` prints stable field names (listed in each `--help`) on `repo list|show|create|edit`, `token create|list`, `run list|view|cancel|rerun`, `runner list` and `version`.
91+- `--json` prints stable field names (listed in each `--help`) on `repo list|show|create|edit`, `issue create|list|show|comment|close|reopen`, `token create|list`, `run list|view|cancel|rerun`, `runner list` and `version`.
9292 - `watch --json` prints one object per line.
9393 - Errors are one line on stderr (`ermite: …`) with exit status 1.
9494 - Shell completion completes repository names from the server.
@@ -88,7 +88,7 @@ Issues need a server with the `issues` feature and `ermite repo edit <repo> --is
88 88
89 ## Output89 ## Output
90 90
91-- `--json` prints stable field names (listed in each `--help`) on `repo list|show|create|edit`, `token create|list`, `run list|view|cancel|rerun`, `runner list` and `version`.91+- `--json` prints stable field names (listed in each `--help`) on `repo list|show|create|edit`, `issue create|list|show|comment|close|reopen`, `token create|list`, `run list|view|cancel|rerun`, `runner list` and `version`.
92 - `watch --json` prints one object per line.92 - `watch --json` prints one object per line.
93 - Errors are one line on stderr (`ermite: …`) with exit status 1.93 - Errors are one line on stderr (`ermite: …`) with exit status 1.
94 - Shell completion completes repository names from the server.94 - Shell completion completes repository names from the server.
M docs/issues.md +1 -1
@@ -50,6 +50,6 @@ The owner moderates in the Inbox, in the first section, **Awaiting moderation**,
5050
5151 An approved issue is rendered as untrusted Markdown: raw HTML is dropped, images are never loaded (their alt text is shown), only `http`, `https` and `mailto` links are kept, each with `rel="nofollow noopener noreferrer ugc"`, and every other link loses its link and keeps its text.
5252
53-No address is stored. The limits and the ban key on an HMAC of the network address made with a server key, and the submission keeps only that hash.
53+No IP address is written to disk. The rate limiter keys on the normalized network address (the IPv4 address, or the IPv6 /64) for at most 24 hours and keeps it only in memory. Pending submissions and bans store only a keyed hash (HMAC) of that network, made with a server key.
5454
5555 The limits see the address of the client only if `ERMITE_TRUSTED_PROXIES` lists your reverse proxy; otherwise every visitor shares the proxy's address and one budget (see [configuration](configuration.md)).
@@ -50,6 +50,6 @@ The owner moderates in the Inbox, in the first section, **Awaiting moderation**,
50 50
51 An approved issue is rendered as untrusted Markdown: raw HTML is dropped, images are never loaded (their alt text is shown), only `http`, `https` and `mailto` links are kept, each with `rel="nofollow noopener noreferrer ugc"`, and every other link loses its link and keeps its text.51 An approved issue is rendered as untrusted Markdown: raw HTML is dropped, images are never loaded (their alt text is shown), only `http`, `https` and `mailto` links are kept, each with `rel="nofollow noopener noreferrer ugc"`, and every other link loses its link and keeps its text.
52 52
53-No address is stored. The limits and the ban key on an HMAC of the network address made with a server key, and the submission keeps only that hash.53+No IP address is written to disk. The rate limiter keys on the normalized network address (the IPv4 address, or the IPv6 /64) for at most 24 hours and keeps it only in memory. Pending submissions and bans store only a keyed hash (HMAC) of that network, made with a server key.
54 54
55 The limits see the address of the client only if `ERMITE_TRUSTED_PROXIES` lists your reverse proxy; otherwise every visitor shares the proxy's address and one budget (see [configuration](configuration.md)).55 The limits see the address of the client only if `ERMITE_TRUSTED_PROXIES` lists your reverse proxy; otherwise every visitor shares the proxy's address and one budget (see [configuration](configuration.md)).
M internal/app/cli_issue.go +1 -1
@@ -365,7 +365,7 @@ func newIssueCommentCmd(env *cliEnv) *cobra.Command {
365365 cmd := &cobra.Command{
366366 Use: "comment <repo> <number>",
367367 Short: "Comment on an issue",
368- Long: "Add a Markdown comment (at most 10,000 characters; disallowed control characters are stripped).\n" +
368+ Long: "Add a plain-text comment (at most 10,000 characters; disallowed control characters are stripped).\n" +
369369 "-m - reads it from standard input. Needs the issue:write scope." + jsonIssueCommentHelp,
370370 Args: cobra.ExactArgs(2),
371371 ValidArgsFunction: completeIssueRepoThenNumber(env),
@@ -365,7 +365,7 @@ func newIssueCommentCmd(env *cliEnv) *cobra.Command {
365 cmd := &cobra.Command{365 cmd := &cobra.Command{
366 Use: "comment <repo> <number>",366 Use: "comment <repo> <number>",
367 Short: "Comment on an issue",367 Short: "Comment on an issue",
368- Long: "Add a Markdown comment (at most 10,000 characters; disallowed control characters are stripped).\n" +368+ Long: "Add a plain-text comment (at most 10,000 characters; disallowed control characters are stripped).\n" +
369 "-m - reads it from standard input. Needs the issue:write scope." + jsonIssueCommentHelp,369 "-m - reads it from standard input. Needs the issue:write scope." + jsonIssueCommentHelp,
370 Args: cobra.ExactArgs(2),370 Args: cobra.ExactArgs(2),
371 ValidArgsFunction: completeIssueRepoThenNumber(env),371 ValidArgsFunction: completeIssueRepoThenNumber(env),
M skills/ermite/CLI.md +2 -2
@@ -70,8 +70,8 @@ Issues share the numbering of merge requests and must be enabled per repository:
7070 | Command | Scope | Notes |
7171 |---|---|---|
7272 | `issue create <repo> --title T [--body TEXT\|-] [--body-file F\|-]` | `issue:write` | title of 120 characters max |
73-| `issue list <repo> [--state open\|closed\|all] [--json]` | read access or `issue:write` | default `open` |
74-| `issue show <repo> <n> [--json]` | read access or `issue:write` | issue and comments |
73+| `issue list <repo> [--state open\|closed\|all] [--json]` | read access (public repository, or `repo:read` on a private one) | default `open`; `issue:write` alone does not grant reading |
74+| `issue show <repo> <n> [--json]` | read access (public repository, or `repo:read` on a private one) | issue and comments; `issue:write` alone does not grant reading |
7575 | `issue comment <repo> <n> -m TEXT\|-` | `issue:write` | |
7676 | `issue close <repo> <n>` / `issue reopen <repo> <n>` | `issue:write` | |
7777
@@ -70,8 +70,8 @@ Issues share the numbering of merge requests and must be enabled per repository:
70 | Command | Scope | Notes |70 | Command | Scope | Notes |
71 |---|---|---|71 |---|---|---|
72 | `issue create <repo> --title T [--body TEXT\|-] [--body-file F\|-]` | `issue:write` | title of 120 characters max |72 | `issue create <repo> --title T [--body TEXT\|-] [--body-file F\|-]` | `issue:write` | title of 120 characters max |
73-| `issue list <repo> [--state open\|closed\|all] [--json]` | read access or `issue:write` | default `open` |73+| `issue list <repo> [--state open\|closed\|all] [--json]` | read access (public repository, or `repo:read` on a private one) | default `open`; `issue:write` alone does not grant reading |
74-| `issue show <repo> <n> [--json]` | read access or `issue:write` | issue and comments |74+| `issue show <repo> <n> [--json]` | read access (public repository, or `repo:read` on a private one) | issue and comments; `issue:write` alone does not grant reading |
75 | `issue comment <repo> <n> -m TEXT\|-` | `issue:write` | |75 | `issue comment <repo> <n> -m TEXT\|-` | `issue:write` | |
76 | `issue close <repo> <n>` / `issue reopen <repo> <n>` | `issue:write` | |76 | `issue close <repo> <n>` / `issue reopen <repo> <n>` | `issue:write` | |
77 77

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 41

↑↓ moveenter openesc close