detached 81ede3b

docs(proto): scope issue event ids to their issue and describe merge request history of unlinked issues

commit
81ede3b81040f2594180d0ca4f180a63b2cea9fd
author
brice · · 2026-10-22 18:31 UTC
parent
7cff81f
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
checks
4/4
refs
maintag: v0.17.0
5 files · +23 -16
M docs/services.md +1 -1
@@ -8,7 +8,7 @@
88 | `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MarkReady`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`, `EnableAutoMerge`, `CancelAutoMerge` (merge by itself once a check passed on the head and all its runs are complete; setting `allow_auto_merge`, `MergeRequest.auto_merge`, events `MergeRequestAutoMergeEnabled` and `MergeRequestAutoMergeCancelled`, `MergeRequestMerged.auto`; feature `merge_requests.auto_merge`). Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |
99 | `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, history events, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ResolveIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. States `OPEN`, `CLOSED`, `RESOLVED`; `ResolveIssue` needs `issue:write`. Features `issues`, `issues.links`, `issues.resolve`. Issues share numbers with merge requests |
1010 | `SessionService` | `CreateLoginLink`, `SignOutEverywhere` (owner only) |
11-| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_resolved` (event 31), `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content). Event 22: `merge_request_mergeability` |
11+| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content). Event 22: `merge_request_mergeability`. Event 31: `issue_resolved` |
1212 | `ServerService` | `GetVersion` (version and features), `GetSigningKey`, `RotateOIDCKey` (owner only) |
1313 | `TrustedKeyService` | `ListTrustedKeys`, `AddTrustedKey` and `RemoveTrustedKey` (owner only). `Commit.verification` carries the result of the check (feature `commit_signatures`) |
1414 | `RunService` | `ListRuns`, `GetRun`, `GetJob`, `GetJobLog` (streamed, follow), `ListAnnotations`, `GetStepSummaries`, `CancelRun`, `RerunRun`, `DispatchWorkflow`, `ListWorkflows`, `DisableWorkflow`, `EnableWorkflow`, `ListChecks`, `ListRunners`, `RemoveRunner` |
@@ -8,7 +8,7 @@
8 | `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MarkReady`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`, `EnableAutoMerge`, `CancelAutoMerge` (merge by itself once a check passed on the head and all its runs are complete; setting `allow_auto_merge`, `MergeRequest.auto_merge`, events `MergeRequestAutoMergeEnabled` and `MergeRequestAutoMergeCancelled`, `MergeRequestMerged.auto`; feature `merge_requests.auto_merge`). Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |8 | `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MarkReady`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`, `EnableAutoMerge`, `CancelAutoMerge` (merge by itself once a check passed on the head and all its runs are complete; setting `allow_auto_merge`, `MergeRequest.auto_merge`, events `MergeRequestAutoMergeEnabled` and `MergeRequestAutoMergeCancelled`, `MergeRequestMerged.auto`; feature `merge_requests.auto_merge`). Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |
9 | `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, history events, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ResolveIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. States `OPEN`, `CLOSED`, `RESOLVED`; `ResolveIssue` needs `issue:write`. Features `issues`, `issues.links`, `issues.resolve`. Issues share numbers with merge requests |9 | `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, history events, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ResolveIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. States `OPEN`, `CLOSED`, `RESOLVED`; `ResolveIssue` needs `issue:write`. Features `issues`, `issues.links`, `issues.resolve`. Issues share numbers with merge requests |
10 | `SessionService` | `CreateLoginLink`, `SignOutEverywhere` (owner only) |10 | `SessionService` | `CreateLoginLink`, `SignOutEverywhere` (owner only) |
11-| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_resolved` (event 31), `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content). Event 22: `merge_request_mergeability` |11+| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content). Event 22: `merge_request_mergeability`. Event 31: `issue_resolved` |
12 | `ServerService` | `GetVersion` (version and features), `GetSigningKey`, `RotateOIDCKey` (owner only) |12 | `ServerService` | `GetVersion` (version and features), `GetSigningKey`, `RotateOIDCKey` (owner only) |
13 | `TrustedKeyService` | `ListTrustedKeys`, `AddTrustedKey` and `RemoveTrustedKey` (owner only). `Commit.verification` carries the result of the check (feature `commit_signatures`) |13 | `TrustedKeyService` | `ListTrustedKeys`, `AddTrustedKey` and `RemoveTrustedKey` (owner only). `Commit.verification` carries the result of the check (feature `commit_signatures`) |
14 | `RunService` | `ListRuns`, `GetRun`, `GetJob`, `GetJobLog` (streamed, follow), `ListAnnotations`, `GetStepSummaries`, `CancelRun`, `RerunRun`, `DispatchWorkflow`, `ListWorkflows`, `DisableWorkflow`, `EnableWorkflow`, `ListChecks`, `ListRunners`, `RemoveRunner` |14 | `RunService` | `ListRuns`, `GetRun`, `GetJob`, `GetJobLog` (streamed, follow), `ListAnnotations`, `GetStepSummaries`, `CancelRun`, `RerunRun`, `DispatchWorkflow`, `ListWorkflows`, `DisableWorkflow`, `EnableWorkflow`, `ListChecks`, `ListRunners`, `RemoveRunner` |
M gen/ermite/ermiteconnect/event.connect.go +8 -6
@@ -49,9 +49,10 @@ type EventServiceClient interface {
4949 // for merge requests, merge_request_opened, merge_request_merged,
5050 // merge_request_closed, comment_added, comment_edited, comment_deleted and
5151 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
52- // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each
53- // one is delivered on the "repo:<name>" topic of its repository and on
54- // "home", subject to the visibility of the repository, except
52+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and
53+ // issue_submitted. Each one is delivered on the "repo:<name>" topic of its
54+ // repository and on "home", subject to the visibility of the repository,
55+ // except
5556 // issue_submitted: it is delivered only on the "owner" topic, never on
5657 // "home" or "repo:<name>", and carries no content (see IssueSubmitted).
5758 //
@@ -125,9 +126,10 @@ type EventServiceHandler interface {
125126 // for merge requests, merge_request_opened, merge_request_merged,
126127 // merge_request_closed, comment_added, comment_edited, comment_deleted and
127128 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
128- // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each
129- // one is delivered on the "repo:<name>" topic of its repository and on
130- // "home", subject to the visibility of the repository, except
129+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and
130+ // issue_submitted. Each one is delivered on the "repo:<name>" topic of its
131+ // repository and on "home", subject to the visibility of the repository,
132+ // except
131133 // issue_submitted: it is delivered only on the "owner" topic, never on
132134 // "home" or "repo:<name>", and carries no content (see IssueSubmitted).
133135 //
@@ -49,9 +49,10 @@ type EventServiceClient interface {
49 // for merge requests, merge_request_opened, merge_request_merged,49 // for merge requests, merge_request_opened, merge_request_merged,
50 // merge_request_closed, comment_added, comment_edited, comment_deleted and50 // merge_request_closed, comment_added, comment_edited, comment_deleted and
51 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,51 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
52- // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each52+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and
53- // one is delivered on the "repo:<name>" topic of its repository and on53+ // issue_submitted. Each one is delivered on the "repo:<name>" topic of its
54- // "home", subject to the visibility of the repository, except54+ // repository and on "home", subject to the visibility of the repository,
55+ // except
55 // issue_submitted: it is delivered only on the "owner" topic, never on56 // issue_submitted: it is delivered only on the "owner" topic, never on
56 // "home" or "repo:<name>", and carries no content (see IssueSubmitted).57 // "home" or "repo:<name>", and carries no content (see IssueSubmitted).
57 //58 //
@@ -125,9 +126,10 @@ type EventServiceHandler interface {
125 // for merge requests, merge_request_opened, merge_request_merged,126 // for merge requests, merge_request_opened, merge_request_merged,
126 // merge_request_closed, comment_added, comment_edited, comment_deleted and127 // merge_request_closed, comment_added, comment_edited, comment_deleted and
127 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,128 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
128- // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each129+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and
129- // one is delivered on the "repo:<name>" topic of its repository and on130+ // issue_submitted. Each one is delivered on the "repo:<name>" topic of its
130- // "home", subject to the visibility of the repository, except131+ // repository and on "home", subject to the visibility of the repository,
132+ // except
131 // issue_submitted: it is delivered only on the "owner" topic, never on133 // issue_submitted: it is delivered only on the "owner" topic, never on
132 // "home" or "repo:<name>", and carries no content (see IssueSubmitted).134 // "home" or "repo:<name>", and carries no content (see IssueSubmitted).
133 //135 //
M gen/ermite/merge_request.pb.go +5 -3 generated file: collapsed
M proto/ermite/event.proto +4 -3
@@ -21,9 +21,10 @@ service EventService {
2121 // for merge requests, merge_request_opened, merge_request_merged,
2222 // merge_request_closed, comment_added, comment_edited, comment_deleted and
2323 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
24- // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each
25- // one is delivered on the "repo:<name>" topic of its repository and on
26- // "home", subject to the visibility of the repository, except
24+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and
25+ // issue_submitted. Each one is delivered on the "repo:<name>" topic of its
26+ // repository and on "home", subject to the visibility of the repository,
27+ // except
2728 // issue_submitted: it is delivered only on the "owner" topic, never on
2829 // "home" or "repo:<name>", and carries no content (see IssueSubmitted).
2930 //
@@ -21,9 +21,10 @@ service EventService {
21 // for merge requests, merge_request_opened, merge_request_merged,21 // for merge requests, merge_request_opened, merge_request_merged,
22 // merge_request_closed, comment_added, comment_edited, comment_deleted and22 // merge_request_closed, comment_added, comment_edited, comment_deleted and
23 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,23 // comment_resolved (a thread resolved or reopened); for issues, issue_opened,
24- // issue_closed, issue_resolved, issue_reopened and issue_commented, and issue_submitted. Each24+ // issue_closed, issue_resolved, issue_reopened and issue_commented, and
25- // one is delivered on the "repo:<name>" topic of its repository and on25+ // issue_submitted. Each one is delivered on the "repo:<name>" topic of its
26- // "home", subject to the visibility of the repository, except26+ // repository and on "home", subject to the visibility of the repository,
27+ // except
27 // issue_submitted: it is delivered only on the "owner" topic, never on28 // issue_submitted: it is delivered only on the "owner" topic, never on
28 // "home" or "repo:<name>", and carries no content (see IssueSubmitted).29 // "home" or "repo:<name>", and carries no content (see IssueSubmitted).
29 //30 //
M proto/ermite/merge_request.proto +5 -3
@@ -449,7 +449,8 @@ enum IssueEventKind {
449449 // IssueEvent is one entry in the history of an issue. Events are append-only:
450450 // a reference that later disappears does not remove its event.
451451 message IssueEvent {
452- // Id identifies the event. Opaque.
452+ // Id identifies the event within its issue. Opaque. Events of different
453+ // issues can share an id: key them by (issue, id).
453454 string id = 1;
454455 // Kind is what happened.
455456 IssueEventKind kind = 2;
@@ -525,8 +526,9 @@ message GetMergeRequestResponse {
525526 // ascending by number, at most 100. Empty when issues are off.
526527 repeated MergeRequestIssue issues = 11;
527528 // IssueEvents are the history entries that involve this merge request: the
528- // REFERENCED and RESOLVED events of the issues it names, oldest first, at
529- // most 500.
529+ // REFERENCED and RESOLVED events of the issues it names or once named,
530+ // oldest first, at most 500. An event can name an issue that is no longer
531+ // in issues. Empty when issues are off.
530532 repeated IssueEvent issue_events = 12;
531533 }
532534
@@ -449,7 +449,8 @@ enum IssueEventKind {
449 // IssueEvent is one entry in the history of an issue. Events are append-only:449 // IssueEvent is one entry in the history of an issue. Events are append-only:
450 // a reference that later disappears does not remove its event.450 // a reference that later disappears does not remove its event.
451 message IssueEvent {451 message IssueEvent {
452- // Id identifies the event. Opaque.452+ // Id identifies the event within its issue. Opaque. Events of different
453+ // issues can share an id: key them by (issue, id).
453 string id = 1;454 string id = 1;
454 // Kind is what happened.455 // Kind is what happened.
455 IssueEventKind kind = 2;456 IssueEventKind kind = 2;
@@ -525,8 +526,9 @@ message GetMergeRequestResponse {
525 // ascending by number, at most 100. Empty when issues are off.526 // ascending by number, at most 100. Empty when issues are off.
526 repeated MergeRequestIssue issues = 11;527 repeated MergeRequestIssue issues = 11;
527 // IssueEvents are the history entries that involve this merge request: the528 // IssueEvents are the history entries that involve this merge request: the
528- // REFERENCED and RESOLVED events of the issues it names, oldest first, at529+ // REFERENCED and RESOLVED events of the issues it names or once named,
529- // most 500.530+ // oldest first, at most 500. An event can name an issue that is no longer
531+ // in issues. Empty when issues are off.
530 repeated IssueEvent issue_events = 12;532 repeated IssueEvent issue_events = 12;
531 }533 }
532 534

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 18

↑↓ moveenter openesc close