github backnotprop/plannotator v0.19.26

3 hours ago

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.19.25 Amp plugin production fixes, Mermaid rendering fix, Settings AI-tip flicker fix
v0.19.24 Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix
v0.19.23 Droid integration, Windows Pi AI fix, quieter update indicator
v0.19.22 Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs
v0.19.21 Ask AI in plan review and annotate mode, shared AI runtime, origin-aware provider defaults
v0.19.20 Interactive goal setup UI, OpenCode submit_plan fixes, browser no-op sentinel handling for Claude agents
v0.19.18 Edit-based submit_plan for OpenCode, Pi namespace migration, Codex annotate-last fix, OpenCode commands dir fix
v0.19.17 Reworked goal setup skill (interview-driven flow), CLI --version flag
v0.19.16 Code navigation with peek view (Cmd/Ctrl+click tokens in diffs)
v0.19.15 Commit-based diff base, jj evolution diffs, GitLab reliability fixes, OpenCode command intercept fix
v0.19.14 Visual explainer skill update, PFM code-file hover previews, Graphviz, diff tab size and line bg intensity, hooks settings tab

What's New in v0.19.26

v0.19.26 is a patch release with six changes. Five are bug fixes carried forward from v0.19.25 (Amp plugin production fixes, Mermaid rendering, Settings flicker), and one improves the update notification UX. Two external contributors, one first-timer.

Update Notification Improvements

The previous update indicator was a small red dot on the Options button that was easy to miss. This release adds three layers of visibility. A toast notification appears briefly after the page loads, directing users to the Options menu. The "Options" label in the toolbar now shimmers when an update is available, using the same animated gradient effect shown inside the dropdown. The "Copy update command" button inside the menu is now a filled primary-color button instead of an understated text link.

The toast auto-dismisses after four seconds and only fires once per session. Opening the Options menu still clears the dot and shimmer as before. Both the plan review and code review apps received the same treatment.

Amp Plugin Production Fixes

The Amp integration shipped in v0.19.24 worked in development but failed in production when installed globally. Three issues surfaced once users installed the plugin to ~/.config/amp/plugins/:

The plugin resolved the plannotator binary via PATH lookup, which in Amp's Bun-shaped runtime could resolve to the wrong executable. It now checks the standard installer paths (~/.local/bin/plannotator on Linux/macOS, %LOCALAPPDATA%\plannotator on Windows) before falling back to PATH. A PLANNOTATOR_BIN environment variable is also available for custom installs.

Amp's ctx.$ helper reported the plugin directory rather than the active workspace, so Plannotator commands ran from the wrong working directory. The plugin now reads Amp's CLI log to resolve the real workspace root.

Amp sets BUN_BE_BUN=1 in the plugin environment. The standalone Plannotator binary inherited this variable and behaved like bun instead of executing its own commands, failing with Script not found "annotate". The plugin now strips this variable before spawning the binary.

Mermaid Diagram Rendering Fix

Mermaid diagrams had several visual regressions: blocks rendered at incorrect sizes, zoom level reset on every parent re-render, and the pinpoint drag handle attached to the wrong target. The root cause was that the parent Viewer component re-injected the rendered SVG via dangerouslySetInnerHTML four to five times during mount and again on every re-render, wiping any imperative DOM changes the Mermaid component had applied after render (sizing attributes, viewBox adjustments, zoom state).

The fix has two parts. First, the component is wrapped in React.memo with a custom comparator that only re-renders when the diagram content changes, blocking parent-triggered re-renders entirely. Second, the sizing attributes (max-width, preserveAspectRatio, height) are now baked directly into the SVG markup string before it enters React state, so even when a legitimate re-render does inject the HTML, the attributes survive. The SVG normalization logic was extracted into a separate dependency-free module (mermaidSvg.ts) to keep it unit-testable without pulling in the browser-only mermaid library.

Settings AI-Tip Input Flicker Fix

The lightbulb button in Settings that opens the AI instruction tip editor caused intense flickering on open. The slide-in animation used a max-height: 0 → 60px keyframe, which is a layout property. Inside the scroll viewport, this triggered a layout feedback loop: the browser recalculated layout, which restarted the animation, which triggered another layout, roughly 40 times per second. The fix switches the keyframe to opacity and transform (translateY), which are compositor-only properties that don't participate in layout.


Install / Update

macOS / Linux:

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

Windows:

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

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

Droid: Install via the plugin marketplace:

droid plugin marketplace add backnotprop/plannotator
droid plugin install plannotator@plannotator

Amp: Install the CLI first, then copy the plugin:

mkdir -p ~/.config/amp/plugins
curl -fsSL https://raw.githubusercontent.com/backnotprop/plannotator/main/apps/amp-plugin/plannotator.ts \
  -o ~/.config/amp/plugins/plannotator.ts

What's Changed

New Contributors

Contributors

@HyunmoAhn diagnosed and fixed the Mermaid rendering regressions, tracing the root cause to repeated dangerouslySetInnerHTML injections from the parent component. The PR included a full test suite for the extracted SVG normalization logic. @j-token returned with a fix for the Settings AI-tip flicker, identifying the max-height animation as the source of the layout feedback loop. @jj-valentine filed #829 with a clear reproduction path and a preliminary code-level diagnosis that pointed directly at the animation keyframes.

Full Changelog: v0.19.25...v0.19.26

Don't miss a new plannotator release

NewReleases is sending notifications on new releases.