LH Block and Shortcode Auditor is network-activated and multisite-only. A site’s block and shortcode registries only exist inside that site’s own request, and switch_to_blog() does not load another site’s plugins or theme, so every site captures and scans itself and writes into two central tables on the base prefix. Network and MCP reporting read those tables.
class-lh-block-and-shortcode-auditor-storage.php): table install via dbDelta gated on a network schema version option, and all reads and writes.…-registry.php): at shutdown on a front-end request, when the site’s registry signature (active plugins, network plugins, theme, plugin version) has changed or a capture was requested, records registered blocks and shortcodes with a provider guess and rebuilds the site’s summary. refresh_counts() rebuilds the summary from the last captured registry plus current usage, so it is safe from admin and cron.…-scanner.php): content sweeps in batches of 100 posts, single-post rescans on save and delete, and widget scans. A forced sweep runs whenever the scanner version changes (currently 5). Each sweep carries a random token passed to every batch job; a batch whose token is no longer current exits, so a forced re-sweep never races an older chain.…-queue.php): every background job goes through this class, which uses Action Scheduler when it is loaded and falls back to WP-Cron. No hard dependency.…-site-admin.php, …-network-admin.php and three list tables).…-abilities.php registrar plus one class per ability). The registrar’s describe_object() builds titles and edit and view links for both the abilities and the network screen.parse_blocks() walk, counting nested blocks.pre and code. Escaped [[tags]], single-character tags, markdown [text](url) links and print_r style [key] => output (plain or entity-escaped) are ignored. A bare single word counts only if it is registered, has key=value attributes, or is self-closing or enclosing; tags containing _ or - always count.plugin:slug, mu-plugin:slug, theme:slug, core, namespace:name or empty.lh_wpn_message push notification logs, and ActivityPub ap_outbox items (stored copies of outgoing activities, which would count the original post’s tags twice). ActivityPub profile extra fields (ap_extrafield, ap_extrafield_blog) are real user content and are scanned. Templates, template parts and patterns are scanned only where stored in the database.auto-draft, inherit and trash, read late so custom statuses are included.GET_LOCK per site. wp_cache_add was not atomic on this cache backend and caused duplicate-key errors when a version bump made every site capture at once.ap_outbox in 0.1.14.