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 | ||