repository.json describes vDiff itself; "tags": true means a release is a
pushed git tag. channel.json is the file users add to their "channels"
setting - it holds nothing but repository URLs, so packages added to it
later reach existing users without them changing anything.
The two are easy to confuse: Package Control rejects a file under
"channels" unless it has a top-level "repositories" key, so a repository
file belongs in "repositories". The README spells that out.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
j and k move the caret one line, delegated to sublime's own `move` command
so they behave exactly like the arrow keys. They dispatch through the
existing ACTIONS registry, so the keymap, the status-bar hints and the ?
popup all stay in sync through the single KEY_GROUPS table.
Unlike the other letter keys, j / k keep no command_mode context: the view
is read-only, so leaving them live while Vintage is in command mode can
only ever move the caret. That asymmetry was previously documented only in
a comment, which was wrong (it claimed j / k were the only unguarded
bindings, but escape has always carried its own context instead). It is now
pinned by test_command_mode_guard_is_deliberate, so normalising the keymap
fails the suite with the reason attached.
Also tidies two long lines in commands.py.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>