- load() rejects duplicate ids (left by the old add bug) and ids that aren't safe positive integers
- save() refuses files the user can't write, and follows dangling symlinks to their target
- CLI rejects ids beyond Number.MAX_SAFE_INTEGER
- Skip permission-based tests when running as root
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- save() follows symlinks, keeps permissions, uses a unique temp file and cleans it up on failure
- load() rejects entries that aren't {id, text, done}
- add() finds the max id with reduce (no spread limit)
- CLI accepts only plain digits as ids and reports save errors readably
- Ignore *.tmp
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>