Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

A free and open-source forge that lives in your Git repo.

Build out change review and threaded discussions

f6f4b1db24292d1df877680714952a9c568e2b78 · Keenan Nemetz · 15d ago · parent 564acd4b

Build out change review and threaded discussions

- Add Conversation, Files and Runs tabs to change requests. Files uses the
  code-browser shape with a changed-file tree and one selected-file diff;
  Runs lists the head commit's workflow results.
- Show anchored review comments beneath the line, with a collapsed excerpt
  read from the exact blob that was reviewed, and return posted anchors to
  their line note.
- Add comment threads: any comment can be replied to, the UI flattens the
  descendants under one root, reply context links back to the parent, and
  reply targets feed a single composer at the foot of the discussion.
- Collapse reply groups while keeping the root visible, and scroll to the
  composer when Reply is selected.
- Add comment context menus with Reply, Copy text, Copy link, Edit and
  Delete. Add web edit/delete routes with author or admin checks; deletion
  leaves a tombstone so replies keep their thread.
- Support --reply-to in the issue and change CLI commands, and treat a
  missing parent as a tombstone rather than an invalid tree.
- Fix the diff comment gutter, action button colours, reply labels, and
  keep the Files tree and diff pane aligned.

Update metadata validation, web templates, CSS, JavaScript, tests, and the
CLI/change-request/issue docs.

docs/change-requests.md +21−3

@@ -67,7 +67,13 @@ account name in `author` and their id in `author_id`; the page shows the author'
67 67 display name, but neither field carries authority. An admin can repair an
68 68 approval, and the override is recorded in `data/audit.log`.
69 69
70 The request page shows:
70 The request page has three tabs. **Conversation** holds the description,
71 discussion, approvals and checks. **Files** is the review surface: a tree of the
72 changed files beside the selected file's diff, with line comments and their
73 composer in place. **Runs** lists the workflow results recorded for the head
74 commit, with links to the run pages and logs.
75
76 Together they show:
71 77
72 78 - the changes compared with the branch it would merge into,
73 79 - CI checks for the head commit,
@@ -83,13 +89,25 @@ example, if the base branch no longer exists.
83 89 ```sh
84 90 vole change comment <id> -m "Does this hold for the empty repository case?"
85 91 vole change comment <id> -m "Good catch, amended." # prints the comment id
92 vole change comment <id> --reply-to <comment-id> -m "A follow-up."
86 93 vole change edit-comment <id> <comment-id> -m "Rephrased."
87 94 vole change rm-comment <id> <comment-id>
88 95 ```
89 96
97 A comment can reply to any comment with `--reply-to`. The web shows one level of
98 nesting by collecting a root's descendants under it. Each comment has a context menu with
99 Reply, Copy, Edit and Delete. Reply targets the one composer at the foot of the
100 discussion; **Cancel reply** clears the target without clearing the draft. Replies
101 can be folded under their root, while the root comment stays visible. Editing and
102 deleting are limited to the author or an admin. Deleting a comment leaves a
103 tombstone so its replies keep the thread they answer.
104
90 105 Only the author can edit or delete a comment. An admin can override that, and the
91 override is recorded in `data/audit.log`. Comments appear on the request page with
92 an anchor for each one (`#c-<ulid>`).
106 override is recorded in `data/audit.log`. Comments appear in the Conversation tab
107 with an anchor for each one (`#c-<ulid>`); a line comment also appears beneath its
108 line in the Files tab (`#inline-c-<ulid>`). A line comment in the conversation
109 carries a collapsed excerpt of the lines around it, read from the exact blob the
110 comment named, so a stale comment still shows the code that was reviewed.
93 111
94 112 You can attach a comment to a line on either side of the diff:
95 113