notevi — read code and take notes; every call is logged in a private jj sidecar. read a file (line-numbered, relative to a jj revision): notevi read FILE whole file notevi read FILE:120-180 line range (or FILE:120 for one line) notevi read -r REV FILE the file as it is in another jj change search (regex): notevi grep PATTERN [PATH] search the working copy notevi grep -r REV PATTERN PATH search another change (scope with PATH) take a note while reading (ids count up from 1 per session): notevi note -f FILE:10-42 TEXT... about a line range notevi note -t struct -f FILE:10-42 TEXT... about a struct/enum/const/fn/... notevi note -r REV -f FILE TEXT... about code in another change notevi note -reply 12 TEXT... reply to log-wide note #12 notevi query -op note shows both the session-local id and the log-wide id used by -reply and by the /note/N permalinks in `notevi web`. REV is any jj revset; default @ (the working copy). The repo-local revset alias notevi_log names the log change. notevi creates it lazily as an anonymous child of root(); it never appears in the project working copy. Every new entry records the full target change id and exact target commit id. A sidecar left by the older vr tool is renamed in place the first time notevi writes to it, and an existing repo-root vr-log.jsonl is read and imported on the first append; notevi leaves that legacy working-tree file for you to remove after migration. The sidecar has no bookmark and is deliberately local-only: a fresh clone will not contain it, so include the jj repository in backups when notes matter.