You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
WordPress 6.9 core rejects these because WP_Ability_Categories_Registry::register() validates the slug against this regex:
/^[a-z0-9]+(?:-[a-z0-9]+)*$/
— which only allows lowercase alphanumerics and dashes. Slashes are not permitted. The category registrations silently fail, then every ability that tries to assign one of these categories fires a second _doingItWrong because the category "is not registered."
Source: wp-includes/abilities-api/class-wp-ability-categories-registry.php line 68.
Symptoms
On every site init, wp-content/debug.log fills with ~30 PHP notices:
[25-Apr-2026 14:33:40 UTC] PHP Notice: Function WP_Ability_Categories_Registry::register was called incorrectly.
Ability category slug must contain only lowercase alphanumeric characters and dashes.
(in version 6.9.0)
[25-Apr-2026 14:33:40 UTC] PHP Notice: Function WP_Abilities_Registry::register was called incorrectly.
Ability category "datamachine-events/events" is not registered.
Please register the ability category before assigning it to ability "data-machine-events/query-events".
The pattern repeats once per category (4 times) plus once per ability that references one (~25+ abilities), totaling ~30 notices per request.
Verified live on extrachill.com (data-machine-events v0.30.0, WordPress 6.9, PHP 8.4).
Functional impact
Beyond log noise, abilities are registered without a category. Means:
Abilities don't appear under their intended category in the chat agent UI
wp datamachine abilities list --category=datamachine-events/events returns empty
Permission filters keyed on category may not match
Discovery/grouping features that expect categorized abilities silently degrade
Root cause
Slug values mix two separators — data-machine-events (kebab) for the plugin namespace, then / for the sub-category. WP core's slug grammar doesn't support that. The pattern probably came from a misreading of how DM core ability slugs work (those allow / because they're full ability identifiers like datamachine/render-image-template, registered through a different code path that doesn't use the kebab regex).
Worth noting that DM core itself uses slash-separated ability slugs everywhere (datamachine/render-image-template, datamachine/run-flow) and those work fine. But ability categories are a separate registry with stricter slug validation.
Suggested fix
Replace / with - in the four category slugs:
publicconstEVENTS = 'datamachine-events-events'; // or just 'events'publicconstVENUES = 'datamachine-events-venues'; // or just 'venues'publicconstTESTING = 'datamachine-events-testing';
publicconstSETTINGS = 'datamachine-events-settings';
…then bulk-update every 'category' => 'datamachine-events/...' reference across inc/Abilities/*.php. About 25–30 call sites — a single sed pass plus visual review. Drop-in compatible, no behavior change beyond categories actually getting registered this time.
Related
Discovered while migrating SlideGenerator → WeeklyRoundupSlideTemplate (Migrate Calendar and EventsMap blocks to @extrachill/api-client #64). The notice flood obscured a real Ability "data-machine-events/query-events" not found error during testing because the abilities never registered properly under their category.
Pre-existing in v0.29.4. Not introduced by recent brand tokens or OG card work.
Cosmetic in production (just notices, not errors), but pollutes debug.log and makes signal-to-noise on real errors worse.
Summary
DataMachineEvents\Abilities\AbilityCategoriesregisters four category slugs that contain/separators:WordPress 6.9 core rejects these because
WP_Ability_Categories_Registry::register()validates the slug against this regex:— which only allows lowercase alphanumerics and dashes. Slashes are not permitted. The category registrations silently fail, then every ability that tries to assign one of these categories fires a second
_doingItWrongbecause the category "is not registered."Source:
wp-includes/abilities-api/class-wp-ability-categories-registry.phpline 68.Symptoms
On every site init,
wp-content/debug.logfills with ~30 PHP notices:The pattern repeats once per category (4 times) plus once per ability that references one (~25+ abilities), totaling ~30 notices per request.
Verified live on extrachill.com (data-machine-events v0.30.0, WordPress 6.9, PHP 8.4).
Functional impact
Beyond log noise, abilities are registered without a category. Means:
wp datamachine abilities list --category=datamachine-events/eventsreturns emptyRoot cause
Slug values mix two separators —
data-machine-events(kebab) for the plugin namespace, then/for the sub-category. WP core's slug grammar doesn't support that. The pattern probably came from a misreading of how DM core ability slugs work (those allow/because they're full ability identifiers likedatamachine/render-image-template, registered through a different code path that doesn't use the kebab regex).Worth noting that DM core itself uses slash-separated ability slugs everywhere (
datamachine/render-image-template,datamachine/run-flow) and those work fine. But ability categories are a separate registry with stricter slug validation.Suggested fix
Replace
/with-in the four category slugs:…then bulk-update every
'category' => 'datamachine-events/...'reference acrossinc/Abilities/*.php. About 25–30 call sites — a single sed pass plus visual review. Drop-in compatible, no behavior change beyond categories actually getting registered this time.Related
SlideGenerator→WeeklyRoundupSlideTemplate(Migrate Calendar and EventsMap blocks to @extrachill/api-client #64). The notice flood obscured a realAbility "data-machine-events/query-events" not founderror during testing because the abilities never registered properly under their category.