[wp-trac] [WordPress Trac] #64596: Abilities API: Allow nested namespace ability names (2-4 segments)

WordPress Trac noreply at wordpress.org
Fri Feb 20 00:50:03 UTC 2026


#64596: Abilities API: Allow nested namespace ability names (2-4 segments)
--------------------------------------+-------------------------------
 Reporter:  jorgefilipecosta          |       Owner:  jorgefilipecosta
     Type:  enhancement               |      Status:  reopened
 Priority:  normal                    |   Milestone:  7.0
Component:  AI                        |     Version:  trunk
 Severity:  normal                    |  Resolution:
 Keywords:  has-patch has-unit-tests  |     Focuses:
--------------------------------------+-------------------------------

Comment (by justlevine):

 Replying to [comment:14 jorbin]:
 > > That's why we intentionally designed what we merged into 6.9 around
 being about to make this decision in 7.0 in the most graceful possible way
 >
 > Where was this discussed? It wasn't on #64098 which is where the
 decision to merge the abilities API was made.

 As I'm sure you can imagine a lot of design discussion and iteration
 happened before we ported and proposed it to Core for merge consideration.
 As you've pointed out yourself on a few occasions, the team's been
 ~~struggling~~ working to centralize conversation and decisions, and
 outdated PR comments are again flaking on me (thanks GitHub slop team), so
 bear with me:

 I can't find the code-specific discussion on the ability registry class
 (@gziolo maybe you remember? IIRC it was when we were refactoring the
 property validation to allow for ability class overloading), but I see
 that @ovidiu-galatan
 [https://wordpress.slack.com/archives/C08TJ8BPULS/p1756469802852299?thread_ts=1756463145.644499&cid=C08TJ8BPULS|brought
 it up in August], which I called out in
 https://github.com/WordPress/ai/issues/40#issuecomment-3382538219 (and
 some interspersed conversation) and
 https://github.com/WordPress/ai/issues/21#issuecomment-3269403237 .
 |To my best recollection the final decision was made during the [Sep 25
 Contributor call](https://make.wordpress.org/ai/2025/09/25/core-ai-
 contributor-check-in-september-24-2025/) to focus on semantic grouping via
 Categories for 6.9 and revisit after we hit that deadline.

 It then came up a few times on random PRs/calls, and I believe
 https://github.com/WordPress/wordpress-
 develop/pull/10665#issuecomment-3780868863 was when the frictions with
 flat abilities became most visible (cc @jasontheadams)


 >
 > Stepping back, the arguments I see in favor of nesting are:
 >
 > > organizing abilities into logical resource groups
 >
 > As pointed out, ability catagories are the canonical way to group
 abilities.

 I believe I already answered this in my first direct reply to you on this
 ticket, so to repeat: no they are not. They are the canonical way to
 semantically '''categorize''' abilities. In contrast (as I wrote above):

 "Nested namespaces aren't about semantic categorization but about routing,
 discovery, hierarchical control, scope encapsulation, caching, etc etc. No
 matter how Abilities Categories evolve over time it will always exist in
 the metadata plane, as it a potential solution to an entirely different
 set of problems that we can't deduplicate without compromising the schema-
 based isolation that Abilities are premised on."


 A contrived attempt to illustrate the difference:

 {{{
 [Ability Category: Images - it's a conceptual feature grouping]
 core/post/generate-featured-image
 core/media/search
 core/media/edit-image
 woocommerce/products/create-mockup
 my-local-sync/media-library/push-images
 my-local-sync/media-library/pull-image
 my-local-sync/media-library/download-images
 s3-offload/library
 }}}


 Notice how Ability Categories exist entirely independently of ownership or
 structure.

 (Yes this is more similar to traditional post `Tags` than hierarchical
 post `Categories`. I remember you were an integral part of the discussion
 on renaming to Ability Categories to clarify the distinction at
 https://github.com/WordPress/wordpress-develop/pull/9410 so I won't be
 redundant by rehashing here, sharing for other readers.)

 > Expecting people to run a substring search on all of the abilities isn't
 creating logical groups, it's creating unnecessary complication.

 Nobody's expecting this(?). I'm not entirely sure why you think people
 will need to run a substring search to use abilities. They don't use one
 to invoke REST, pretty permalinks, or hooks. Invoking remains the same.

 What it actually allows is ''browsability'' and ''discoverability''. Think
 of scrolling a list of hundreds `core/get-*` trying to find the one you
 want. Conceptually this is the same for typing autocomplete,
 programmatically surfacing and mapping CP commands (and all the other
 programmatic concerns I mentioned above), and of course allowing LLMs to
 efficiently find and discover the correct ability to invoke.

 >
 > > We plan to use this new type of naming for post abilities.
 >
 > Assuming this is referring to #64455, that ticket is no longer in the
 7.0 milestone.

 Post Abilities was the concrete visualization that caused the team to push
 forward the approach, This is an enhancement in and of itself that we plan
 to use for most - if not all - complex abilities.

 We cannot test or iterate on essential Core abilities ''outside of core'''
 (e.g. in the Experiments plugin for feedback) that would benefit from slug
 fragments without nested abilities being in core (the other solutions I
 came up with add a significant amount of tech-debt, like a hook to short-
 circuit the registry validation - which compromises the schema integrity
 of Abilities (it's entire raison d'etre).

 And we obviously don't want to ship a bunch of subpar `core/{verb}-{post-
 type}` to core to only then have to deprecate and cause the actual
 futurecompat friction we both agree is important to avoid.

 > Forcing version detection onto each plugin is forcing pain on to them.

 Again [https://core.trac.wordpress.org/ticket/64596?replyto=14#comment:10
 |not] what's happening here. Nobody is forced into version detection,
 nobody is forced into adding namespaces.

 > And for what? So there can be a second way to create groupings?

 Asked and answered (I hope - 3x times by my count)

 > In order for the abilities API to do namespaces differently than every
 other part of core that does namespaces?

 Again, nope. Different than blocks. The same as every other instance I
 could think of - and
 [https://core.trac.wordpress.org/ticket/64596?replyto=14#comment:6|previously
 listed out for you] - including REST.


 -----

 (I understand I'm not the best written communicator, but it's very
 frustrating for me when I directly and repeatedly reply to your concerns
 and you pivot or "take a step back" and don't actually engage with what I
 replied - and then ignore it all and just restate your original point. I'm
 a part-time volunteer contributor, and I believe we both share the same
 goals which are to prevent trigger-happy folks from merging slop into
 core. If you disagree with a point I raised, that's obvs fine, but call it
 out please don't ignore it. If you don't understand something I wrote,
 highlight it and I'll try to rephrase more succinctly. My offer to answer
 any questions or concerns you have shortly and directly over DM or a call,
 still stands. But I'm not sure how to advance this conversation forward
 resolution if you won't directly engage 😔)

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/64596#comment:15>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list