github backnotprop/plannotator v0.17.8

13 hours ago

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.7 Fix "fetch did not return a Response" error in OpenCode web/serve modes
v0.17.6 Bun.serve error handlers for diagnostic 500 responses, install.cmd cache fix
v0.17.5 Fix VCS detection crash when p4 not installed, install script cache path fix
v0.17.4 Vault browser merged into Files tab, Kanagawa themes, Pi idle session tool fix
v0.17.3 Sticky lane repo/branch badge overflow fix
v0.17.2 Supply-chain hardening, sticky toolstrip and badges, overlay scrollbars, external annotation highlighting, Conventional Comments
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish
v0.16.4 Compound planning improvement hook, GitHub Enterprise + self-hosted GitLab, dockview workspace, new themes

What's New in v0.17.8

v0.17.8 fixes a data loss bug in annotate mode, makes the default code review diff view configurable, adds a way to close a review session without killing the agent, and improves markdown rendering across the board. Four PRs in this release, including the first contribution from @gwynnnplaine and @githendrik.

Configurable Default Code Review Diff Type

The default diff view in code review used to be uncommitted, which combines staged and unstaged changes. That doesn't match git diff semantics — running git diff in your terminal shows only unstaged hunks. Users who stage hunks as they review them had no way to focus on just the unstaged remainder without manually toggling the dropdown every session.

This release switches the default to unstaged and makes it user-configurable. The first time you run a local code review session after upgrading, a setup dialog asks which view you'd prefer as your default. The choice is persisted to ~/.plannotator/config.json and can be changed any time from Settings > Display. P4 users keep their existing default (p4-default); the dropdown still works for one-off switches during a session.

Close Button to Exit Review and Annotate Sessions

Once you opened a Pi PR review with /plannotator-review <pr-url>, there was no obvious way to end the session without killing the entire Pi agent. The review UI had no "Close" or "Done" affordance, so finishing meant either submitting feedback you didn't want to give or terminating the agent and losing context.

A Close button now lives in the review and annotate toolbars. When you have annotations queued, it flips to "Send Feedback" so the action always reflects what's about to happen. On the server side, a new /api/exit endpoint resolves the session cleanly without going through the feedback path. This works in both review and annotate flows.

Markdown Rendering Improvements

A handful of long-standing rough edges in the markdown renderer used by plan review and annotate mode are addressed in this release.

Bullet markers in multi-line list items used to float to vertical center; they're now pinned to the top of the first line so the marker sits where you'd expect. Bullet glyphs are consistent across nesting levels. Strikethrough (~~text~~) renders as <del>. Triple-asterisk ***bold italic*** parses correctly instead of getting eaten by the double-asterisk pass. Backslash escaping (\*, \_, \`, \[, \~) renders the literal character without showing the backslash. Autolinks (<https://url> and <email@domain.com>) become clickable links. Checkbox icons are nudged 3px down to align with the text baseline.

A test fixture covering all of these cases now lives at tests/test-fixtures/10-inline-gaps-and-bullets.md.

Annotate Data Loss Fix on Linked Document Submission

When running plannotator annotate on a markdown file with links to other files, annotations left on the original file were silently dropped if you clicked "Send Annotations" while viewing a linked document. The submission endpoint only sent annotations from the currently-viewed file, so a careful round of annotations on the original could disappear with no warning, no recovery path, and nothing persisted to disk.

The bug was in useLinkedDoc.open(): it stashed original-file annotations into a ref before swapping React state to the linked doc, but getDocAnnotations() only read from the doc cache and the active linked doc — never from the stashed state. The submission pipeline never saw the original file's annotations. The UI also showed the wrong count, because docAnnotationCount only updated on back() rather than on every navigation.

Both are fixed. The hook now exposes a sourceFilePath option so getDocAnnotations() can pull stashed annotations back into the submission payload, and the count updates immediately on navigation. Plan mode, folder mode, and annotate-last were never affected.


Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows PowerShell:

irm https://plannotator.ai/install.ps1 | iex

Pin a specific version:

curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.8

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

Copilot CLI:

/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator

Gemini CLI: The install script auto-detects ~/.gemini and configures hooks, policy, and slash commands.

OpenCode: Clear cache and restart:

rm -rf ~/.cache/opencode/packages/@plannotator ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

VS Code Extension: Install from the VS Code Marketplace.


What's Changed

  • fix(annotate): include original file annotations when submitting from linked doc view by @backnotprop in #536
  • feat(review): configurable default diff type by @backnotprop in #531
  • fix(review): add Close button to exit Pi review session by @gwynnnplaine in #523
  • fix: improve markdown rendering and bullet alignment by @backnotprop in #530

New Contributors

Community

@gwynnnplaine filed #522 about being unable to end a review session without killing the Pi agent, then turned around and shipped the fix in #523 — issue and resolution from the same person, which is the kind of contribution that makes this project tick.

@gwtaylor filed a careful, well-reproduced bug report in #535 for the annotate data loss bug, including UI screenshots, reproduction steps, and root-cause analysis. That report made the fix in #536 straightforward to land.

@githendrik opened #521 asking for an unstaged-only review view to support a stage-as-you-review workflow, which became the configurable default diff type in #531. @prashanth057's earlier #287 on diff view options provided context for the broader design.

Full Changelog: v0.17.7...v0.17.8

Don't miss a new plannotator release

NewReleases is sending notifications on new releases.