- add() uses max id + 1 so ids are never reused after rm
- done/rm reject missing, non-numeric and unknown ids; add rejects empty text
- load() gives a readable error on bad JSON or non-list data
- save() writes a temp file and renames it
- CLI checks the command before loading and no longer relies on process.exit for ls
- Add regression tests for all of the above
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Project settings can't re-open a path denied by another settings source,
so this lives in user settings instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Run git ls-remote unsandboxed so SSH works, and ask before each use like
the other network git commands.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Enable the Bash sandbox with writes limited to the project, block reads
of credential and personal folders, and protect the settings files from
edits. git commit/push/fetch/pull run unsandboxed so GPG and SSH work;
network git commands always ask first.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>