Repository navigation
v2.11.0
Added
- Menu items persist navigation-block attributes without a dedicated column (#344) — a new nullable JSON
menu_items.block_attributescolumn (cast to an array onMenuItem, and included inMenuResolver's item shape) stores block attributes such as visual-editor block visibility, animations, and bindings, so they survive a menu save instead of being dropped. The migration is guarded withhasTable/hasColumn, so it is safe to re-run and to roll back. Required byartisanpack-ui/visual-editor1.12.
Changed
- The AI trigger surfaces use the shared
HandlesAiFeatureResponsestrait (#335) —AiControllerand theAiToolsLivewire component now delegate the AI exception-to-response mapping and the per-feature enabled-state registry walk toartisanpack-ui/ai'sHandlesAiFeatureResponsestrait instead of carrying their own copies. Response envelopes are unchanged. artisanpack-ui/aiconstraint raised to^1.2(#337) — the test suite now consumes the sharedArtisanPackUI\Ai\Testing\FakeAgentPromptershipped inai1.2, and the local copy was removed.
Fixed
-
Plugin activation runs the migrations of Composer packages it installs (#338) — when a plugin's manifest
composerblock installed a package that ships migrations through its own service provider, activation registered the package's autoloader but never created its tables, so the first request touching a package model failed withBase table or view not found. When activation freshly installs a package, it now runs an unscopedmigrate --forceafter the plugin's service provider registers. It runs outside the activation transaction to keep the #333 DDL guarantee, and a failure unwinds through the existing activation rollback. -
An update that fails before extraction no longer reports a spurious rollback failure (#336) — steps before
Extract(maintenance mode, backup, download, checksum verification) never touch the application tree, buthandleUpdateFailure()still attempted a snapshot restore. When that restore itself failed, a benign refusal (for example an unverified checksum) was reported asRollback failed … Manual intervention required. A pre-extract failure now skips the restore, marks rollback as not applicable, and surfaces the original error. -
NotificationPolicyno longer denies every user the ability to create or delete notifications (#332) —create()anddelete()gated onmethod_exists( $user, 'hasCapability' ), but cms-framework's user model composesHasRolesAndPermissions(rbac'sHasPermissions), whose public surface ishasPermissionTo()/hasPermission()and which never defineshasCapability(). On a stock hostmethod_exists()was alwaysfalse, sonotifications.managecould never take effect no matter which role held it. Both methods now resolve the capability through a shareduserHasCapability()helper that probeshasCapability→hasPermissionTo→hasPermissionin priority order, each guarded withmethod_exists(), so the first contract the host model exposes decides — while still degrading to a plain denial (not a fatal) on a user model that composes no RBAC trait. This mirrors theFontPolicyfix inartisanpack-ui/visual-editor#733.