Problem
A common step in my workflow — and in many other vibe-coders' workflows — is asking an LLM to do a code review. The result is a list of comments with references to specific files and lines. To judge whether those comments are actually meaningful, I need to look at the corresponding code in my editor, comment by comment. It would be much nicer to open revdiff with that list of comments already preloaded, where I can edit them, drop the ones that don't make sense, and add my own on top — all in the same view as the diff itself.
revdiff already has the perfect surface for this (annotation gutter, @ popup, filter-by-annotated tree, hunk navigation); it just has no way to seed annotations from an external source.
Proposal
Add a repeatable --annotation <json> flag that pre-populates the annotation store at startup with comments supplied inline as JSON. Each value is either a single annotation object or a JSON array of them:
revdiff --annotation '{"file":"app/main.go","line":42,"type":"+","comment":"check error here"}' \
--annotation '[{"file":"app/main.go","line":80,"end_line":95,"type":"+","comment":"split this"},
{"file":"app/main.go","comment":"file-level note"}]' \
HEAD~1
Problem
A common step in my workflow — and in many other vibe-coders' workflows — is asking an LLM to do a code review. The result is a list of comments with references to specific files and lines. To judge whether those comments are actually meaningful, I need to look at the corresponding code in my editor, comment by comment. It would be much nicer to open revdiff with that list of comments already preloaded, where I can edit them, drop the ones that don't make sense, and add my own on top — all in the same view as the diff itself.
revdiff already has the perfect surface for this (annotation gutter,
@popup, filter-by-annotated tree, hunk navigation); it just has no way to seed annotations from an external source.Proposal
Add a repeatable
--annotation <json>flag that pre-populates the annotation store at startup with comments supplied inline as JSON. Each value is either a single annotation object or a JSON array of them: