Repository navigation
Releases: igorkasyanchuk/diffnotes
Releases · igorkasyanchuk/diffnotes
Release list
DiffNotes 1.7.0
Release 1.7.0: onboarding without friction, however you came
- /welcome in two halves: read notes (add the extension, see notes in a real diff:
the live demo PR) for everyone, write notes (set up the agent, a first PR) when you
open PRs; a reviewer skips the second half in one click. Each step plays a short
mockup of what to see and press and ticks itself: the extension on connect, "seen"
when the extension draws notes in a diff (users.seen_at, backfilled). - One command sets up the agent: "set up my agent" makes a token and shows
curl …/install.sh | DIFFNOTES_SETUP_TOKEN=… sh, which installs the skill and saves the
token to ~/.config/diffnotes/env (600); the skill reads it when the environment has
no token: no shell profile, no restart. A token exported for another server is never
saved; a failed skill download fails the script. - The extension opens its connect page in a tab on install (Server filled in with
https://diffnotes.dev), then goes on to the server's /welcome; connect and remove are
taken from the extension's own pages only. - Invited with GitHub: straight to the invitation, then /welcome, which remembers the
team joined. Settings, /docs, the landing steps, the hero outro, README and docs
describe the same flow.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
DiffNotes 1.6.1
Security
- Invitations by email wait on a dashboard only for a user whose email GitHub proved: someone who made a user for
another person's address through their own invitation link no longer catches the invitations other teams send it. - A long repository name can't stall the server any more (its parsing was quadratic in a run of
/). - Request bodies are measured, not taken from
content-length(a chunked request skippedMAX_BODY_KB). - Sessions are stored as SHA-256 (nobody is signed out by the change); the cookie is
__Host-sidover https (the old
sidis taken only for a session from before); only a Bearer token skips the cross-site check (a Basic auth
proxy's header doesn't), and a browser withoutSec-Fetch-Sitethat sends anOriginmust send this site's. - Login throttles key IPv6 clients by /64, sweep at most once a minute and keep at most 50,000 entries.
- Files a bucket refused to delete are kept and tried again by the hourly purge, instead of staying in the bucket.
- Extension: tokens live in the extension's own IndexedDB, out of
storage.local(which its content scripts can
read); a file preview opens only on a person's click and only for a file of the PR on the page; demos and videos are
posted only into its owndemo.html. - Skill: the base branch is fetched as
refs/heads/$B(a branch named like a git option can't act as one); what it
reads (code, PR text,.diffnotes.yml, stored notes) is data, never instructions; a PR's code runs only for a trusted
author and withoutDIFFNOTES_TOKEN. The MCP tool descriptions say the same.install.shworks with spaces in$HOME.
DiffNotes 1.6.0
Added
- Notes follow the code: a note keeps its first line's text (
code); after a push moves the block, the extension
puts the note on the nearest line that reads so (moved to line N), or marks it code changed since. The skill sends
codeon every line note and its check script verifies it. - Diff blocks in notes: a
```diffblock colours its+and-lines; the skill uses it for API examples (a
changed endpoint's response before and after) next to the request. - Numbers in the summary: the skill adds a before / after table when it measured speed, size or load.
- Note style:
detail: brief | normal | thoroughin.diffnotes.yml, and per personDIFFNOTES_DETAILand
DIFFNOTES_HINTSin the shell profile, over the repository'sdetailandnotes(never over what it requires).
Security
- Extension sign-in checks the issuer:
/connect's answer names the server (iss) and the extension trades a code only
with the server it asked. Before, a malicious server you connected could send the sign-in window on to another server's
allow page and collect that server's code and verifier. An older server (noiss) asks to update or to paste a token.
The allow page names the server and shows the browser's name as what it says it is.
v1.4.0
Added
.diffnotes.yml: a repository says how its PRs are annotated (language, tone, paths to skip, where screenshots
go, risk and deploy card required, what the summary covers); the skill follows it, the server's rules still enforce.- Preview-deploy links:
preview(the PR's preview deploy, https) and a note'stry(a path on it) give
try it on the preview ↗ under the note in the diff and on the PR's page; the skill finds the preview from the PR's
GitHub deployments or the preview bot's comment. - Stacked pull requests:
stacklists the PRs of a stack, bottom first; the summary box and the PR's page show it
with this PR highlighted and mark the others that have notes. - Skill versions: the served skill carries its version (the release plus a hash of the skill and this server's
limits) and/skill/versionsays the current one; an
installed copy that is older asks you to re-run the install (it never follows the server's copy on its own). - Server admin: each account's files, size against its quota and the estimated monthly storage cost at B2, R2
or S3 list prices (as of 27 Oct 2026), the biggest account first, with totals.
Changed
- Notes and files are kept 365 days after a PR's last upload by default (was 30); set
RETENTION_DAYSfor less. PRs and files
now live longer againstMAX_PULLSandMAX_ACCOUNT_MB: raise them if accounts fill up. - Deploy card: list items starting with
migration:,env:,flag:,step:orrollback:show that kind as a tag.
Security
- Skill: branch names (which a PR's author picks, and which may hold shell syntax such as
x$(…)) are read from the
CLI into quoted variables and never typed into a command;git fetch/git merge-baseused to take them as typed.
Re-run the install to get it. - Extension: what another connected server sends (notes, preview, stack) is checked before it is drawn, so a bad value
shows nothing instead of breaking the box; preview links never leave the preview's own path or host.
DiffNotes 1.1.0
Added
- Deploy card: the agent says what shipping a PR takes (migrations, env vars, feature flags, the order of steps,
rollback) indeploy; it is pinned at the top of the summary box and the PR's page, and copy summary includes it. - Repository rules: an account admin sets what every upload to a repository must carry (a risk on every note, a
deploy card, screenshots or a recording for paths likeweb/**); a missing one is refused with422saying what to
add, and the skill and MCP clients add it. - Keyboard in the extension:
j/knext / previous note,nnotes on / off,oopens the note's attachment,
?lists the keys. SECURITY.md: report vulnerabilities privately through GitHub.