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/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0: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/issues.md +13−5

@@ -119,17 +119,25 @@ vole issue new --title "the docs page is blank" \
119 119
120 120 ## Comments
121 121
122 A comment is a file at `issues/<id>/comments/<ulid>.md` with `author` and
123 `created` metadata.
122 A comment is a file at `issues/<id>/comments/<ulid>.md` with `author`,
123 `created`, and optionally `reply_to` metadata. `reply_to` names any comment in
124 the same thread. The web renders one level of nesting by collecting a root's
125 descendants beneath it.
124 126
125 127 Only the author of a comment can edit or delete it. Vole compares the author on
126 128 the old version of the file with the account behind the SSH key. An admin can
127 129 override this, for example to repair a thread after someone leaves, and the
128 130 override is recorded in `data/audit.log`.
129 131
130 Deleting a comment removes the file, but the text remains in Git history. Editing
131 a comment does not add an "edited" field; the commit carries the time. Deleting is
132 not redaction. Redaction means an admin force-push.
132 Deleting a comment replaces it with a tombstone ("Comment deleted") so replies
133 keep the thread they answer. The text remains in Git history, and a deleted
134 comment cannot be edited. Editing a comment does not add an "edited" field; the
135 commit carries the time. Deleting is not redaction. Redaction means an admin
136 force-push.
137
138 The web comment menu offers Reply, Copy, Edit and Delete. Editing and deleting
139 are limited to the author or an admin, and deletion leaves a tombstone so replies
140 keep their thread.
133 141
134 142 The issue itself works differently. Closing, relabeling, or assigning someone
135 143 else's issue is normal triage, not a claim of authorship.