Version 5.0.5
July 22, 2026
Fixed
- The Edits tab no longer fills up with autosaves. Provisional and explicit drafts fire
Element::EVENT_AFTER_SAVEevery few seconds while an entry is open in the CP; only saves of the canonical element are recorded now. - Saving an element on a multi-site install recorded one edit per propagated site. Propagated saves are now skipped, so a save shows up once.
- Bulk resave jobs no longer flood the Edits tab with elements the editor never touched.
PuppyConfig.actionUrlwas hardcoded to/actions/puppy/session, which was wrong for sites using a customactionTriggeror a subfolder install. It's now built withUrlHelper::actionUrl().- Trail items are now held to the length limits
TrailItemdeclares. Labels and context are truncated to 255 characters (multibyte-safe) and items with a URL over 2,048 characters are skipped, so an oversized value can't bloat the session. - Corrected the
developerUrlincomposer.json.
Added
- DDEV environment and a Codeception test suite covering the Trail service, TrailItem model, SessionController and the element-save listener.
Version 5.0.4
April 15, 2026
Fixed
- Puppy panel now stays fully visible within the viewport. Added edge-aware clamping during drag, on window resize, on initial load, and when toggling collapsed/expanded state.
Version 5.0.3
April 15, 2026
Changed
- Puppy panel header paw logo (🐾) now renders in white to match the header text, using a
brightness(0) invert(1)filter on.puppy-logo.
Version 5.0.2
April 10, 2026
Fixed
- Login-page guard (the overlay fix): In src/Plugin.php, the asset bundle and PuppyConfig JS are now skipped when Craft::$app->getUser()->getIsGuest() is true. This is checked inside the EVENT_BEFORE_RENDER_TEMPLATE handler (not init()), so identity is resolved by then. Login, forgot-password, set-password, verify-email all render as guest, so Puppy stays hidden. The element-save listener also bails for guests.
Added
Craft coding-guideline fixes (verified against the 5.x docs):
src/Plugin.php — added @property-read Trail $trail docblock so $this->trail is IDE-typed (Craft guideline for app-component-style access). Reordered the early-return (console check first), and added trailing commas on multi-line arguments per PSR-12/Craft style.
- src/controllers/SessionController.php — added $this->requireAcceptsJson() to all three actions, matching the guideline "JSON-only actions require requireAcceptsJson()". The JS already sends Accept: application/json, so no frontend change needed.
Version 5.0.1
March 24, 2026
Fixed
- Corrected license to Craft license
Version 5.0.0
March 24, 2026
Added
- Initial release of Craft Puppy for Craft CMS 5.