30 days free. No credit card. Full access from the moment you connect your site.

Start free trial

v0.0.20 — route access-control library-missing notice through main-menu 0.0.30 acrossai_notices hub

Highlights

Changed — access-control library-missing warning now routes through the shared AcrossAI notice hub. The pre-0.0.20 AcrossAI_Abilities_Access_Control::maybe_show_library_notice() method was hooked on WordPress core admin_notices and printed a raw .notice.notice-warning banner on every admin screen when the wpb-access-control library wasn't loaded. It is renamed to register_library_notice( array $notices ): array and now registers into the new acrossai_notices filter shipped by acrossai-co/main-menu 0.0.30. The notice appears in two places instead:

  • As a card on the new AcrossAI → Notices submenu (only registered when at least one notice is present, with a WP-style count bubble on the menu label).
  • As a single top-of-page WordPress-native .notice.notice-warning.is-dismissible summary banner ("AcrossAI has N notifications for your attention — View notices →") printed on every other admin page. Dismissal is fingerprint-persisted per user (_acrossai_notices_summary_fp) and the summary re-appears whenever the notice set changes.

Notice record shape: id=wpb_access_control_missing, type=warning, source=AcrossAI Abilities Manager. Semantics are unchanged — the fail-open behaviour (per DEC-PERM-CB), the manage_options gate, and the message copy are all preserved.

Composer dependency bump — acrossai-co/main-menu 0.0.29 → 0.0.30. Ships the cross-plugin notice system this release routes through:

  • New acrossai_notices filter — any AcrossAI consumer plugin can push admin-notice records into a shared collection using a single documented record shape (id, title, message, type, optional source, optional action { label, url }). Later registrations of the same id are ignored (first-wins). Missing id or both title and message empty → the entry is dropped.
  • New AcrossAI → Notices submenu (slug acrossai-notices, class NoticesPageRenderer) — only registered when at least one notice exists. Menu label carries a WP-style count bubble (.awaiting-mod).
  • New top-of-page summary notice emitter (SummaryNoticeEmitter) — prints one WordPress-native dismissible banner on every other admin page linking to the Notices submenu. Fingerprint-based dismissal (SHA-1 of sorted notice IDs stored in per-user meta).
  • New AJAX endpoint wp_ajax_acrossai_notices_dismiss_summary — nonce + manage_options guarded; server re-validates the client-supplied fingerprint against the current notice set as defense-in-depth against poisoning the user meta with an unrelated hash.
  • New public classes under AcrossAI_Main_Menu\: Notices, NoticesPageRenderer, NoticesAjaxHandlers, SummaryNoticeEmitter. New page-slug constant SettingsPage::NOTICES_SLUG and static accessor SettingsPage::get_notices(): ?Notices.

Intentionally unchanged

  • The vendor-missing boot-resilience notice in Includes\Main::__construct() remains on core admin_notices. That code path fires precisely when the composer autoloader is absent — the moment when the shared main-menu package isn't loadable either — so the acrossai_notices filter cannot be reached from it. Matches Constitution §V Integration Resilience.

No breaking changes

  • No ability slug rename.
  • No REST endpoint change.
  • No option-shape change.
  • No new required capability.
  • Existing 218 abilities behave identically.
  • Safe upgrade from 0.0.19.

Composer

"acrossai-co/main-menu": "0.0.30"

Full Changelog: 0.0.19…0.0.20


Keep reading