> */ public function sub_group_rules(): array; /** * Exact ability names that bypass the rules. * * Keyed by the full ability name, including the namespace. Beats every rule, so this is how a * single ability the rules get wrong is corrected without contorting them. Expected to stay * short — a long list here means the rules are wrong and should be fixed instead. * * @since 0.0.42 * @return array Ability name => sub_group key. */ public function sub_group_overrides(): array; /** * Where an ability goes when no rule matched. * * Return a non-empty key. This is what guarantees an ability the host plugin adds later is * still placed, which is the point of the whole interface — returning `''` opts back out of * that guarantee and leaves such abilities unreachable by sub-group. * * @since 0.0.42 * @return string */ public function default_sub_group(): string; /** * Display label for each sub-group key this integration can assign. * * Without an entry here the label is derived as `ucwords( str_replace( '-', ' ', $key ) )` by * {@see \AcrossAI_Abilities_Manager\Includes\Modules\Library\Ability_Definition}, which turns * `elementor-elements` into "Elementor Elements" rather than "Elements & Widgets". * * An integration that already keeps this map on its `Base__Ability` should return that * map rather than restate it, so the two halves of the group cannot drift apart. * * @since 0.0.42 * @return array sub_group key => label. */ public function sub_group_labels(): array; }