Fix: Auto-expire now actually runs. The cleanup callback was only registered inside wp-admin, so the daily cron event fired with nothing listening and expired notices were never removed.
Fix: WordPress core, plugin, and theme update and security nags now stay on the dashboard by default instead of being routed into the popup. Existing installs are corrected automatically on upgrade.
Fix: A very large notice is no longer lost. Oversized notices failed to save and were also withheld from the dashboard, so they vanished from both places; storage now holds far larger notices and anything that still fails to save falls back to the dashboard.
Fix: Notices are no longer misfiled. Classification read CSS classes from anywhere inside a notice, so an info notice containing an element marked “error” was filed as an error and your per-type rule was applied to the wrong bucket. Only the notice’s own outer element is inspected now.
Fix: Notices left on the dashboard are passed through untouched, so setup and consent notices from other plugins keep working. They were previously stripped of inline scripts and handlers, which silently broke their buttons while Notice Vault was active.
Fix: Switching tab or filter while “Load more” is still loading no longer leaves the wrong notices on screen.
Fix: Notice text containing special characters or emoji renders correctly instead of showing raw character codes. Existing notices are repaired on upgrade.
Fix: Rapidly double-clicking mark-as-read, dismiss, or a bulk action no longer fires the request twice.
Fix: A failed upgrade step can no longer roll back completed ones and undo a per-type rule you deliberately changed.
Security: Form controls are no longer kept in stored notices, and links that open a new tab now carry rel=”noopener noreferrer”.
Performance: Added database indexes for the popup’s sort order and duplicate checks, and the toolbar no longer loads full notice markup on every admin page.
Multisite: Network activation and deactivation now set up and clean up every site on the network instead of only the current one.
Change: Duplicate notices are prevented at the database level, so two simultaneous admin requests can no longer store the same notice twice.
Change: Upgrade steps that touch many notices now run in batches and resume until finished, instead of being skipped on large vaults.
i18n: Translation template regenerated. Around 40 interface strings had never been made available to translators; the template now covers the whole interface and drops entries for features that no longer exist.
1.0.4 – 2026-06-29
New: GDPR personal-data exporter and eraser so captured notices are covered by WordPress’s privacy export/erase tools.
Fix: Error notices are no longer hidden by default — error-type notices now stay on the dashboard instead of being routed into the popup. Warning notices default to the popup on a fresh install, and upgrades keep your existing warning rule untouched.
Fix: A captured notice’s own dismiss button is stripped from the popup so it can’t break out of the vault layout.
Fix: Restored the background blur behind the popup and clipped the popup to its rounded corners (no more square corners on the modal variant).
Fix: Slide Panel variant no longer overlaps the mobile admin bar or leaves a bottom gap.
Change: Renamed the “Panel” popup style to “Slide from Right (Large)” and widened the desktop Modal and Slide Panel layouts.
Change: The popup and toolbar are now admin-only (manage_options).
Change: Captured notices are de-duplicated on a normalized text signature, with timestamps stored in UTC.
Performance: Settings page counts notices with COUNT(*) instead of loading every row; the transient sweep is skipped when a persistent object cache is active; the re-hash migration is bounded to avoid a long synchronous loop on large vaults.
Security: Hardened bulk operations and AJAX capability checks, forced stored notices to the current user, and guarded against popping another plugin’s output buffer during capture.
Dev: Removed the bundled Select2 library and the disabled User Visibility code.
1.0.3 – 2026-06-08
New: Full UI/UX redesign — card-based settings layout with brand logo hero, indigo accent, segmented controls for per-type rules, visual popup-style picker with mini previews, sticky save bar with dirty-form detection, side rail with stats + how-it-works.
New: Popup refresh — slimmer header, state tabs (Unread/All), wrap-style filter chips, redesigned notice cards with type-colored edge + hover lift, custom SVG empty-state, skeleton loading, toasts with colored stripe + progress bar, confirm modal with backdrop blur.
Fix: Saving settings no longer renders the “Settings saved.” notice twice.
Fix: Admin-bar count badge correctly hides on count = 0 (the previous !important chain defeated jQuery .hide()); badge inner text also resets to “0” for screen-reader parity.
Fix: Filter chips in the popup wrap to multiple rows instead of horizontally overflowing the popup edge.
Fix: Removed redundant jQuery .focus() shorthand that triggered a JQMIGRATE deprecation warning.
Asset: Brand logo now sits beside “Notice Vault” in the settings hero (56×56) and beside the “Notices” title in the popup header (22×22), replacing the generic dashicon-bell.
Author URI: Changed from GitHub profile to https://profiles.wordpress.org/abduremon/.
i18n: POT regenerated to match the redesigned strings.
1.0.2 – 2026-05-24
Fix: Sync NOTICE_VAULT_VERSION constant with plugin version
1.0.1 – 2026-05-24
Fix: Updated minimum WordPress version requirement to 6.4
1.0.0 – 2026-05-22
Initial release.
Notice capture system covering admin_notices, network_admin_notices, user_admin_notices, and all_admin_notices.
Admin toolbar counter with quick-preview submenu.
Popup interface with three display styles (Slide from Right, Modal, Slide Background Panel).
Settings page with per-type rules and a configurable auto-expire window.
“Load more” pagination in the popup for users with large notice lists.
Captured notice content preserves clickable links and basic formatting through a strict server-side wp_kses allowlist (<a>, <strong>, <em>, <code>, lists, …); scripts, iframes, and inline event handlers always stripped.
System notices (update-nag, update-message, …) are detected before generic notice-* severity classes so they reliably route to the System bucket.
Filterable popup type dropdown — custom buckets registered via the notice_vault_notice_types filter appear here too.
Multisite uninstall iterates every blog and drops its per-blog notices table.
Daily cleanup cron sweeps per-user unread-count transients when anything actually expires, so the admin-bar badge can’t show a stale count past expiry.
Long URLs inside notice content wrap instead of overflowing the popup.
Confirm modal is localized and specific to the clear-all action.
AJAX errors (mark-as-read / dismiss / mark-all-read / clear-all) surface a toast on failure instead of silently doing nothing.