Skip to content

Releases: igorkasyanchuk/diffnotes

DiffNotes 1.7.0

Choose a tag to compare

@igorkasyanchuk igorkasyanchuk released this 31 Oct 10:32

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

Choose a tag to compare

@igorkasyanchuk igorkasyanchuk released this 29 Oct 22:02

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 skipped MAX_BODY_KB).
  • Sessions are stored as SHA-256 (nobody is signed out by the change); the cookie is __Host-sid over https (the old
    sid is 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 without Sec-Fetch-Site that sends an Origin must 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 own demo.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 without DIFFNOTES_TOKEN. The MCP tool descriptions say the same. install.sh works with spaces in $HOME.

DiffNotes 1.6.0

Choose a tag to compare

@igorkasyanchuk igorkasyanchuk released this 29 Oct 17:39

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
    code on every line note and its check script verifies it.
  • Diff blocks in notes: a ```diff block 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 | thorough in .diffnotes.yml, and per person DIFFNOTES_DETAIL and
    DIFFNOTES_HINTS in the shell profile, over the repository's detail and notes (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 (no iss) 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

Choose a tag to compare

@igorkasyanchuk igorkasyanchuk released this 27 Oct 22:39

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's try (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: stack lists 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/version says 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_DAYS for less. PRs and files
    now live longer against MAX_PULLS and MAX_ACCOUNT_MB: raise them if accounts fill up.
  • Deploy card: list items starting with migration:, env:, flag:, step: or rollback: 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-base used 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

Choose a tag to compare

@igorkasyanchuk igorkasyanchuk released this 26 Oct 07:43

Added

  • Deploy card: the agent says what shipping a PR takes (migrations, env vars, feature flags, the order of steps,
    rollback) in deploy; 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 like web/**); a missing one is refused with 422 saying what to
    add, and the skill and MCP clients add it.
  • Keyboard in the extension: j / k next / previous note, n notes on / off, o opens the note's attachment,
    ? lists the keys.
  • SECURITY.md: report vulnerabilities privately through GitHub.