# Graph Report - advanced-ads (2026-07-08)

## Corpus Check

-   701 files · ~417,229 words
-   Verdict: corpus is large enough that graph structure adds value.

## Summary

-   4585 nodes · 6519 edges · 575 communities (366 shown, 209 thin omitted)
-   Extraction: 84% EXTRACTED · 16% INFERRED · 0% AMBIGUOUS · INFERRED: 1027 edges (avg confidence: 0.8)
-   Token cost: 0 input · 0 output

## Graph Freshness

-   Built from commit: `0cbee8fe`
-   Run `git rev-parse HEAD` and compare to check if the graph is stale.
-   Run `graphify update .` after code changes (no API cost).

## Community Hubs (Navigation)

-   [[_COMMUNITY_Community 0|Community 0]]
-   [[_COMMUNITY_Community 1|Community 1]]
-   [[_COMMUNITY_Community 2|Community 2]]
-   [[_COMMUNITY_Community 3|Community 3]]
-   [[_COMMUNITY_Community 4|Community 4]]
-   [[_COMMUNITY_Community 5|Community 5]]
-   [[_COMMUNITY_Community 6|Community 6]]
-   [[_COMMUNITY_Community 7|Community 7]]
-   [[_COMMUNITY_Community 8|Community 8]]
-   [[_COMMUNITY_Community 9|Community 9]]
-   [[_COMMUNITY_Community 10|Community 10]]
-   [[_COMMUNITY_Community 11|Community 11]]
-   [[_COMMUNITY_Community 12|Community 12]]
-   [[_COMMUNITY_Community 13|Community 13]]
-   [[_COMMUNITY_Community 14|Community 14]]
-   [[_COMMUNITY_Community 15|Community 15]]
-   [[_COMMUNITY_Community 16|Community 16]]
-   [[_COMMUNITY_Community 17|Community 17]]
-   [[_COMMUNITY_Community 18|Community 18]]
-   [[_COMMUNITY_Community 19|Community 19]]
-   [[_COMMUNITY_Community 20|Community 20]]
-   [[_COMMUNITY_Community 21|Community 21]]
-   [[_COMMUNITY_Community 22|Community 22]]
-   [[_COMMUNITY_Community 23|Community 23]]
-   [[_COMMUNITY_Community 24|Community 24]]
-   [[_COMMUNITY_Community 25|Community 25]]
-   [[_COMMUNITY_Community 26|Community 26]]
-   [[_COMMUNITY_Community 27|Community 27]]
-   [[_COMMUNITY_Community 28|Community 28]]
-   [[_COMMUNITY_Community 29|Community 29]]
-   [[_COMMUNITY_Community 30|Community 30]]
-   [[_COMMUNITY_Community 31|Community 31]]
-   [[_COMMUNITY_Community 32|Community 32]]
-   [[_COMMUNITY_Community 33|Community 33]]
-   [[_COMMUNITY_Community 34|Community 34]]
-   [[_COMMUNITY_Community 35|Community 35]]
-   [[_COMMUNITY_Community 36|Community 36]]
-   [[_COMMUNITY_Community 37|Community 37]]
-   [[_COMMUNITY_Community 38|Community 38]]
-   [[_COMMUNITY_Community 39|Community 39]]
-   [[_COMMUNITY_Community 40|Community 40]]
-   [[_COMMUNITY_Community 41|Community 41]]
-   [[_COMMUNITY_Community 42|Community 42]]
-   [[_COMMUNITY_Community 43|Community 43]]
-   [[_COMMUNITY_Community 44|Community 44]]
-   [[_COMMUNITY_Community 45|Community 45]]
-   [[_COMMUNITY_Community 46|Community 46]]
-   [[_COMMUNITY_Community 47|Community 47]]
-   [[_COMMUNITY_Community 48|Community 48]]
-   [[_COMMUNITY_Community 49|Community 49]]
-   [[_COMMUNITY_Community 50|Community 50]]
-   [[_COMMUNITY_Community 51|Community 51]]
-   [[_COMMUNITY_Community 52|Community 52]]
-   [[_COMMUNITY_Community 53|Community 53]]
-   [[_COMMUNITY_Community 54|Community 54]]
-   [[_COMMUNITY_Community 55|Community 55]]
-   [[_COMMUNITY_Community 56|Community 56]]
-   [[_COMMUNITY_Community 57|Community 57]]
-   [[_COMMUNITY_Community 58|Community 58]]
-   [[_COMMUNITY_Community 59|Community 59]]
-   [[_COMMUNITY_Community 60|Community 60]]
-   [[_COMMUNITY_Community 61|Community 61]]
-   [[_COMMUNITY_Community 62|Community 62]]
-   [[_COMMUNITY_Community 63|Community 63]]
-   [[_COMMUNITY_Community 64|Community 64]]
-   [[_COMMUNITY_Community 65|Community 65]]
-   [[_COMMUNITY_Community 66|Community 66]]
-   [[_COMMUNITY_Community 67|Community 67]]
-   [[_COMMUNITY_Community 68|Community 68]]
-   [[_COMMUNITY_Community 69|Community 69]]
-   [[_COMMUNITY_Community 70|Community 70]]
-   [[_COMMUNITY_Community 71|Community 71]]
-   [[_COMMUNITY_Community 72|Community 72]]
-   [[_COMMUNITY_Community 73|Community 73]]
-   [[_COMMUNITY_Community 74|Community 74]]
-   [[_COMMUNITY_Community 75|Community 75]]
-   [[_COMMUNITY_Community 76|Community 76]]
-   [[_COMMUNITY_Community 77|Community 77]]
-   [[_COMMUNITY_Community 78|Community 78]]
-   [[_COMMUNITY_Community 79|Community 79]]
-   [[_COMMUNITY_Community 80|Community 80]]
-   [[_COMMUNITY_Community 81|Community 81]]
-   [[_COMMUNITY_Community 82|Community 82]]
-   [[_COMMUNITY_Community 83|Community 83]]
-   [[_COMMUNITY_Community 84|Community 84]]
-   [[_COMMUNITY_Community 85|Community 85]]
-   [[_COMMUNITY_Community 86|Community 86]]
-   [[_COMMUNITY_Community 87|Community 87]]
-   [[_COMMUNITY_Community 88|Community 88]]
-   [[_COMMUNITY_Community 89|Community 89]]
-   [[_COMMUNITY_Community 90|Community 90]]
-   [[_COMMUNITY_Community 91|Community 91]]
-   [[_COMMUNITY_Community 92|Community 92]]
-   [[_COMMUNITY_Community 93|Community 93]]
-   [[_COMMUNITY_Community 94|Community 94]]
-   [[_COMMUNITY_Community 95|Community 95]]
-   [[_COMMUNITY_Community 96|Community 96]]
-   [[_COMMUNITY_Community 97|Community 97]]
-   [[_COMMUNITY_Community 98|Community 98]]
-   [[_COMMUNITY_Community 99|Community 99]]
-   [[_COMMUNITY_Community 100|Community 100]]
-   [[_COMMUNITY_Community 101|Community 101]]
-   [[_COMMUNITY_Community 102|Community 102]]
-   [[_COMMUNITY_Community 103|Community 103]]
-   [[_COMMUNITY_Community 104|Community 104]]
-   [[_COMMUNITY_Community 105|Community 105]]
-   [[_COMMUNITY_Community 106|Community 106]]
-   [[_COMMUNITY_Community 107|Community 107]]
-   [[_COMMUNITY_Community 108|Community 108]]
-   [[_COMMUNITY_Community 109|Community 109]]
-   [[_COMMUNITY_Community 110|Community 110]]
-   [[_COMMUNITY_Community 111|Community 111]]
-   [[_COMMUNITY_Community 112|Community 112]]
-   [[_COMMUNITY_Community 113|Community 113]]
-   [[_COMMUNITY_Community 114|Community 114]]
-   [[_COMMUNITY_Community 115|Community 115]]
-   [[_COMMUNITY_Community 116|Community 116]]
-   [[_COMMUNITY_Community 117|Community 117]]
-   [[_COMMUNITY_Community 118|Community 118]]
-   [[_COMMUNITY_Community 119|Community 119]]
-   [[_COMMUNITY_Community 120|Community 120]]
-   [[_COMMUNITY_Community 121|Community 121]]
-   [[_COMMUNITY_Community 122|Community 122]]
-   [[_COMMUNITY_Community 123|Community 123]]
-   [[_COMMUNITY_Community 124|Community 124]]
-   [[_COMMUNITY_Community 125|Community 125]]
-   [[_COMMUNITY_Community 126|Community 126]]
-   [[_COMMUNITY_Community 127|Community 127]]
-   [[_COMMUNITY_Community 128|Community 128]]
-   [[_COMMUNITY_Community 129|Community 129]]
-   [[_COMMUNITY_Community 130|Community 130]]
-   [[_COMMUNITY_Community 131|Community 131]]
-   [[_COMMUNITY_Community 132|Community 132]]
-   [[_COMMUNITY_Community 133|Community 133]]
-   [[_COMMUNITY_Community 134|Community 134]]
-   [[_COMMUNITY_Community 135|Community 135]]
-   [[_COMMUNITY_Community 136|Community 136]]
-   [[_COMMUNITY_Community 137|Community 137]]
-   [[_COMMUNITY_Community 138|Community 138]]
-   [[_COMMUNITY_Community 139|Community 139]]
-   [[_COMMUNITY_Community 140|Community 140]]
-   [[_COMMUNITY_Community 141|Community 141]]
-   [[_COMMUNITY_Community 142|Community 142]]
-   [[_COMMUNITY_Community 143|Community 143]]
-   [[_COMMUNITY_Community 144|Community 144]]
-   [[_COMMUNITY_Community 145|Community 145]]
-   [[_COMMUNITY_Community 146|Community 146]]
-   [[_COMMUNITY_Community 147|Community 147]]
-   [[_COMMUNITY_Community 148|Community 148]]
-   [[_COMMUNITY_Community 149|Community 149]]
-   [[_COMMUNITY_Community 150|Community 150]]
-   [[_COMMUNITY_Community 151|Community 151]]
-   [[_COMMUNITY_Community 152|Community 152]]
-   [[_COMMUNITY_Community 153|Community 153]]
-   [[_COMMUNITY_Community 154|Community 154]]
-   [[_COMMUNITY_Community 155|Community 155]]
-   [[_COMMUNITY_Community 156|Community 156]]
-   [[_COMMUNITY_Community 157|Community 157]]
-   [[_COMMUNITY_Community 158|Community 158]]
-   [[_COMMUNITY_Community 159|Community 159]]
-   [[_COMMUNITY_Community 160|Community 160]]
-   [[_COMMUNITY_Community 161|Community 161]]
-   [[_COMMUNITY_Community 162|Community 162]]
-   [[_COMMUNITY_Community 163|Community 163]]
-   [[_COMMUNITY_Community 164|Community 164]]
-   [[_COMMUNITY_Community 165|Community 165]]
-   [[_COMMUNITY_Community 166|Community 166]]
-   [[_COMMUNITY_Community 167|Community 167]]
-   [[_COMMUNITY_Community 168|Community 168]]
-   [[_COMMUNITY_Community 169|Community 169]]
-   [[_COMMUNITY_Community 170|Community 170]]
-   [[_COMMUNITY_Community 174|Community 174]]
-   [[_COMMUNITY_Community 177|Community 177]]
-   [[_COMMUNITY_Community 178|Community 178]]
-   [[_COMMUNITY_Community 179|Community 179]]
-   [[_COMMUNITY_Community 180|Community 180]]
-   [[_COMMUNITY_Community 181|Community 181]]
-   [[_COMMUNITY_Community 182|Community 182]]
-   [[_COMMUNITY_Community 183|Community 183]]
-   [[_COMMUNITY_Community 184|Community 184]]
-   [[_COMMUNITY_Community 185|Community 185]]
-   [[_COMMUNITY_Community 186|Community 186]]
-   [[_COMMUNITY_Community 187|Community 187]]
-   [[_COMMUNITY_Community 188|Community 188]]
-   [[_COMMUNITY_Community 189|Community 189]]
-   [[_COMMUNITY_Community 190|Community 190]]
-   [[_COMMUNITY_Community 192|Community 192]]
-   [[_COMMUNITY_Community 193|Community 193]]
-   [[_COMMUNITY_Community 194|Community 194]]
-   [[_COMMUNITY_Community 195|Community 195]]
-   [[_COMMUNITY_Community 196|Community 196]]
-   [[_COMMUNITY_Community 197|Community 197]]
-   [[_COMMUNITY_Community 198|Community 198]]
-   [[_COMMUNITY_Community 199|Community 199]]
-   [[_COMMUNITY_Community 200|Community 200]]
-   [[_COMMUNITY_Community 201|Community 201]]
-   [[_COMMUNITY_Community 202|Community 202]]
-   [[_COMMUNITY_Community 203|Community 203]]
-   [[_COMMUNITY_Community 205|Community 205]]
-   [[_COMMUNITY_Community 206|Community 206]]
-   [[_COMMUNITY_Community 207|Community 207]]
-   [[_COMMUNITY_Community 208|Community 208]]
-   [[_COMMUNITY_Community 209|Community 209]]
-   [[_COMMUNITY_Community 210|Community 210]]
-   [[_COMMUNITY_Community 212|Community 212]]
-   [[_COMMUNITY_Community 213|Community 213]]
-   [[_COMMUNITY_Community 214|Community 214]]
-   [[_COMMUNITY_Community 215|Community 215]]
-   [[_COMMUNITY_Community 216|Community 216]]
-   [[_COMMUNITY_Community 217|Community 217]]
-   [[_COMMUNITY_Community 218|Community 218]]
-   [[_COMMUNITY_Community 219|Community 219]]
-   [[_COMMUNITY_Community 220|Community 220]]
-   [[_COMMUNITY_Community 221|Community 221]]
-   [[_COMMUNITY_Community 222|Community 222]]
-   [[_COMMUNITY_Community 223|Community 223]]
-   [[_COMMUNITY_Community 224|Community 224]]
-   [[_COMMUNITY_Community 225|Community 225]]
-   [[_COMMUNITY_Community 226|Community 226]]
-   [[_COMMUNITY_Community 227|Community 227]]
-   [[_COMMUNITY_Community 228|Community 228]]
-   [[_COMMUNITY_Community 229|Community 229]]
-   [[_COMMUNITY_Community 230|Community 230]]
-   [[_COMMUNITY_Community 231|Community 231]]
-   [[_COMMUNITY_Community 232|Community 232]]
-   [[_COMMUNITY_Community 233|Community 233]]
-   [[_COMMUNITY_Community 234|Community 234]]
-   [[_COMMUNITY_Community 235|Community 235]]
-   [[_COMMUNITY_Community 236|Community 236]]
-   [[_COMMUNITY_Community 237|Community 237]]
-   [[_COMMUNITY_Community 238|Community 238]]
-   [[_COMMUNITY_Community 239|Community 239]]
-   [[_COMMUNITY_Community 240|Community 240]]
-   [[_COMMUNITY_Community 241|Community 241]]
-   [[_COMMUNITY_Community 243|Community 243]]
-   [[_COMMUNITY_Community 245|Community 245]]
-   [[_COMMUNITY_Community 246|Community 246]]
-   [[_COMMUNITY_Community 247|Community 247]]
-   [[_COMMUNITY_Community 248|Community 248]]
-   [[_COMMUNITY_Community 249|Community 249]]
-   [[_COMMUNITY_Community 250|Community 250]]
-   [[_COMMUNITY_Community 251|Community 251]]
-   [[_COMMUNITY_Community 252|Community 252]]
-   [[_COMMUNITY_Community 253|Community 253]]
-   [[_COMMUNITY_Community 254|Community 254]]
-   [[_COMMUNITY_Community 255|Community 255]]
-   [[_COMMUNITY_Community 256|Community 256]]
-   [[_COMMUNITY_Community 257|Community 257]]
-   [[_COMMUNITY_Community 258|Community 258]]
-   [[_COMMUNITY_Community 259|Community 259]]
-   [[_COMMUNITY_Community 260|Community 260]]
-   [[_COMMUNITY_Community 261|Community 261]]
-   [[_COMMUNITY_Community 262|Community 262]]
-   [[_COMMUNITY_Community 263|Community 263]]
-   [[_COMMUNITY_Community 264|Community 264]]
-   [[_COMMUNITY_Community 266|Community 266]]
-   [[_COMMUNITY_Community 267|Community 267]]
-   [[_COMMUNITY_Community 268|Community 268]]
-   [[_COMMUNITY_Community 269|Community 269]]
-   [[_COMMUNITY_Community 270|Community 270]]
-   [[_COMMUNITY_Community 271|Community 271]]
-   [[_COMMUNITY_Community 272|Community 272]]
-   [[_COMMUNITY_Community 273|Community 273]]
-   [[_COMMUNITY_Community 274|Community 274]]
-   [[_COMMUNITY_Community 275|Community 275]]
-   [[_COMMUNITY_Community 276|Community 276]]
-   [[_COMMUNITY_Community 277|Community 277]]
-   [[_COMMUNITY_Community 278|Community 278]]
-   [[_COMMUNITY_Community 279|Community 279]]
-   [[_COMMUNITY_Community 281|Community 281]]
-   [[_COMMUNITY_Community 284|Community 284]]
-   [[_COMMUNITY_Community 285|Community 285]]
-   [[_COMMUNITY_Community 286|Community 286]]
-   [[_COMMUNITY_Community 287|Community 287]]
-   [[_COMMUNITY_Community 288|Community 288]]
-   [[_COMMUNITY_Community 289|Community 289]]
-   [[_COMMUNITY_Community 290|Community 290]]
-   [[_COMMUNITY_Community 291|Community 291]]
-   [[_COMMUNITY_Community 292|Community 292]]
-   [[_COMMUNITY_Community 294|Community 294]]
-   [[_COMMUNITY_Community 295|Community 295]]
-   [[_COMMUNITY_Community 296|Community 296]]
-   [[_COMMUNITY_Community 297|Community 297]]
-   [[_COMMUNITY_Community 298|Community 298]]
-   [[_COMMUNITY_Community 299|Community 299]]
-   [[_COMMUNITY_Community 300|Community 300]]
-   [[_COMMUNITY_Community 301|Community 301]]

## God Nodes (most connected - your core abstractions)

1. `Conditional` - 146 edges
2. `License` - 143 edges
3. `Advanced_Ads` - 77 edges
4. `License_Utils` - 63 edges
5. `Ad` - 59 edges
6. `WordPress` - 57 edges
7. `wp_advads()` - 56 edges
8. `Advanced_Ads_AdSense_MAPI` - 53 edges
9. `Advanced_Ads_Ad_Health_Notices` - 52 edges
10. `Advanced_Ads_AdSense_Data` - 45 edges

## Surprising Connections (you probably didn't know these)

-   `advads_can_display_ads()` --calls--> `Advanced_Ads` [INFERRED]
    includes/functions-conditional.php → public/class-advanced-ads.php
-   `close()` --calls--> `$()` [INFERRED]
    admin/assets/js/conditions.js → assets/js/admin/oneclick-onboarding.js
-   `wp_advads_get_ad_factory()` --calls--> `wp_advads()` [INFERRED]
    includes/functions-ad.php → advanced-ads.php
-   `wp_advads_get_ad_repository()` --calls--> `wp_advads()` [INFERRED]
    includes/functions-ad.php → advanced-ads.php
-   `wp_advads_get_ad_type_manager()` --calls--> `wp_advads()` [INFERRED]
    includes/functions-ad.php → advanced-ads.php

## Communities (575 total, 209 thin omitted)

### Community 0 - "Community 0"

Cohesion: 0.06
Nodes (86): ae(), b(), c(), D(), de(), E(), ee(), f() (+78 more)

### Community 1 - "Community 1"

Cohesion: 0.05
Nodes (6): Ad_Repository, Group_Repository, Cache_Invalidator, wp_advads_get_ad_factory(), Placement_Repository, advads_upgrade_2_0_9_migrate_group_legacy_options()

### Community 2 - "Community 2"

Cohesion: 0.05
Nodes (5): Ad_Inserter, Amp_WP_Ads, Google_Sheet, wp_advads_create_new_ad(), OnBoarding

### Community 4 - "Community 4"

Cohesion: 0.05
Nodes (21): load(), advads_ads_txt_find_issues(), advads_show_adsense_auto_ads_warning(), AdvancedAdsAdNetwork, AdvancedAdsExternalAdUnit, ajax(), closeAdSelector(), getSelectedRow() (+13 more)

### Community 6 - "Community 6"

Cohesion: 0.06
Nodes (4): Advanced_Ads_Ads_Txt_Admin, Advanced_Ads_Ads_Txt_Strategy, Advanced_Ads_Ads_Txt_Utils, Advanced_Ads_Ads_Txt_Public

### Community 9 - "Community 9"

Cohesion: 0.07
Nodes (3): Addon_Updater, Advanced_Ads_Admin_Licenses, Plugin

### Community 11 - "Community 11"

Cohesion: 0.05
Nodes (40): code:php (/**), code:typescript (test( 'Upgrade plan selection opens checkout bridge with upg), code:bash (PLAYWRIGHT_HTML_OPEN=never npm run test:playwright -- --proj), code:javascript (/**), code:javascript (globalThis.location.href = buildShopUpgradeCheckoutUrl( {), code:javascript (globalThis.location.href = buildShopRenewalCheckoutUrl( { li), code:bash (npm run build), code:bash (PLAYWRIGHT_HTML_OPEN=never npm run test:playwright -- --proj) (+32 more)

### Community 13 - "Community 13"

Cohesion: 0.07
Nodes (3): noticeError(), noticeSuccess(), removeAllNotices()

### Community 14 - "Community 14"

Cohesion: 0.08
Nodes (19): CategoryCard(), FAQs(), PaidSupport(), SearchBox(), SupportForum(), TicketModal(), Videos(), ActivateLicense() (+11 more)

### Community 16 - "Community 16"

Cohesion: 0.14
Nodes (37): addonIdForLicenseKey(), addonIdForLicenseProductName(), buildPostCheckoutNoticeCopy(), buildShopEddUpgradeUrl(), buildShopRenewalCheckoutUrl(), buildShopRenewalUrl(), buildShopSsoUrl(), canActivateLicenseRowOnSite() (+29 more)

### Community 17 - "Community 17"

Cohesion: 0.05
Nodes (37): code:php (public function test_find_same_line_site_active_siblings_ret), code:bash (git add tests/Unit/License/LicenseTest.php), code:php (public function test_deactivate_on_shop_then_local_removes_o), code:php (public static function deactivate_on_shop_then_local( string), code:php ($merged = self::deactivate_on_shop_then_local( $deactivating), code:php ($still_active = false;), code:bash (git add includes/license/class-license.php tests/Unit/Licens), code:php (public function test_align_mutually_exclusive_site_slots_kee) (+29 more)

### Community 18 - "Community 18"

Cohesion: 0.05
Nodes (36): code:php (public function test*is_legacy_license_store_true_when_rich*), code:php (public function test_sync_local_activations_calls_shop_for_l), code:php (/\*\*), code:php ($rich = [), code:bash (git add includes/license/class-license.php tests/Unit/Licens), code:php (public function test_save_licenses_legacy_connect_syncs_with), code:php ($is_legacy = self::is_legacy_license_store();), code:bash (git add includes/license/class-license.php tests/Unit/Licens) (+28 more)

### Community 19 - "Community 19"

Cohesion: 0.05
Nodes (36): code:php (public function test_admin_screen_url_returns_license_app_pa), code:bash (git add admin/includes/notices.php admin/includes/ad-health-), code:php (if ( isset( $\_setting_tab['group'] ) && 'advanced-ads-licens), code:php (if ( isset( $\_setting_tab['group'] ) ) {), code:bash (git add includes/admin/class-settings.php views/admin/screen), code:php (add_action( 'advanced-ads-settings-init', [ $this, 'add_lice), code:bash (git add includes/admin/class-addon-updater.php), code:php (add_action( 'wp_ajax_advads-activate-license', [ $this, 'act) (+28 more)

### Community 22 - "Community 22"

Cohesion: 0.06
Nodes (31): code:typescript (import { expect } from '@playwright/test';), code:typescript (test( 'advads_upgrade_error shows upgrade unavailable notice), code:bash (wp-env start), code:json (// "shop" is optional — not required for license Playwright ), code:typescript (import { expect, Page } from '@playwright/test';), code:typescript (export const LICENSE_ADMIN_PATH =), code:typescript (import { test, expect } from '@playwright/test';), code:typescript (for ( const plan of CHECKOUT_PLANS ) {) (+23 more)

### Community 26 - "Community 26"

Cohesion: 0.07
Nodes (29): Add: `License_Utils::admin_screen_url()`, After, Architecture, Automated, Before, code:block1 (Settings page), code:block2 (Settings page (no Licenses tab)), code:php (/\*\*) (+21 more)

### Community 30 - "Community 30"

Cohesion: 0.07
Nodes (28): code:php (public function test_is_flat_map_retired_false_by_default():), code:php (public function get_licenses(): array {), code:bash (git add includes/rest/class-licenses.php), code:php (public function test_get_addon_key_map_derives_from_rich_whe), code:php (public static function get_addon_key_map(): array {), code:bash (git commit -m "feat(license): derive addon key map from rich), code:bash (git commit -m "feat(license): stop persisting flat map; fix ), code:bash (graphify update .) (+20 more)

### Community 32 - "Community 32"

Cohesion: 0.11
Nodes (3): Admin_Menu, Admin_Notices, TinyMCE

### Community 33 - "Community 33"

Cohesion: 0.07
Nodes (3): Ad_Dummy, Ad_Plain, WordPress

### Community 34 - "Community 34"

Cohesion: 0.07
Nodes (27): Codebase health audit and regression confidence — implementation plan, code:markdown (# Codebase health report), code:bash (git add docs/superpowers/artifacts/flow-test-matrix.md docs/), code:bash (rg 'wp*ajax*|register_rest_route|\$\_REQUEST|unserialize\(' -), code:bash (git add docs/superpowers/artifacts/security-checklist-result), code:bash (git add docs/superpowers/artifacts/duplication-notes.md docs), code:bash (git add docs/superpowers/findings/2026-05-13-codebase-health), code:bash (git add docs/superpowers/findings/2026-05-13-codebase-health) (+19 more)

### Community 35 - "Community 35"

Cohesion: 0.07
Nodes (27): Architecture, Client — `advanced-ads`, code:block1 ({shop}/sso-login?site=…&intent=upgrade|renew&license_id=…&do), code:block2 ({shop}/checkout/?site={plugin_license_admin_url}&intent=upgr), code:block3 ({shop}/checkout/?edd_action=sl_license_upgrade&license_id=37), code:block4 ({shop}/checkout/?site={plugin_license_admin_url}&intent=rene), code:block5 (https://customer.test/wp-admin/admin.php?page=advanced-ads-a), code:text (Today (upgrade):) (+19 more)

### Community 36 - "Community 36"

Cohesion: 0.07
Nodes (27): 1. Resolve post-checkout license row, 2. Classify setup state, 3. Build notice copy, Acceptance criteria, code:block1 (if row is All Access bundle:), code:block2 (Shop redirect), Component changes, Conditional post-checkout license notice — design (+19 more)

### Community 37 - "Community 37"

Cohesion: 0.07
Nodes (27): Activation (switch Pro 1 → Pro 2), Architecture, code:block1 (User: Activate Pro 2), code:block2 (User: Deactivate Pro 1), code:block3 (advanced-ads-app-licenses rich rows + sitesActivated[] per), Components, Data flow (unchanged storage), Deactivation (Pro 1 only) (+19 more)

### Community 38 - "Community 38"

Cohesion: 0.13
Nodes (15): Ad_Group, Group_Factory, is_an_ad(), get_the_group(), is_a_group(), the_ad_group(), wp_advads_create_group_type(), wp_advads_delete_group() (+7 more)

### Community 39 - "Community 39"

Cohesion: 0.11
Nodes (16): buildUrl(), navigate(), normalizeAdminAppPathname(), useArea(), useCurrentPath(), useCurrentRoute(), useSearchParams(), EmptyState() (+8 more)

### Community 40 - "Community 40"

Cohesion: 0.12
Nodes (5): FileUploader, debounce(), searchCombobox(), submitFormToAPI(), ticketForm()

### Community 41 - "Community 41"

Cohesion: 0.07
Nodes (26): Activation contract, Architecture, code:block1 (POST shop /wp-json/advanced-ads/v2/license/activate { licens), code:block2 (admin_post_advanced-ads-license), code:php ($is_legacy = self::is_legacy_license_store( $existing );), Decisions, Error handling, Legacy user (stored licenses or flat map) (+18 more)

### Community 42 - "Community 42"

Cohesion: 0.14
Nodes (5): Assets, wp_advads(), wp_advads_json_add(), wp_advads_json_remove(), Groups

### Community 44 - "Community 44"

Cohesion: 0.15
Nodes (23): buildLicenseSuccessNoticeOptions(), buildLicenseWarningNoticeOptions(), clearLicenseNoticeDisplayMeta(), expiryNoticeMessage(), getNoticeIcon(), getNoticeVariant(), handleActivationQueryErrors(), handleExpiryNotices() (+15 more)

### Community 45 - "Community 45"

Cohesion: 0.08
Nodes (25): 10. Repeated `safeObject` pattern in `normalizeLicensesResponse`, 11. Two patterns for getting the license list in `AddonRowActions.jsx`, 12. Duplicate `pricingId` validation in two files, 13. Break up `getDisplayLicenseStatus`, 1. `useFetch.js` always sends POST instead of GET, 2. Duplicate `STORE_NAME` in `licenses-api.js`, 3. `activateActionsDisabled` in `AddonRowActions.jsx`, 4. `isComponentsBusy` prop in `DownloadActivateButton.jsx` (+17 more)

### Community 47 - "Community 47"

Cohesion: 0.08
Nodes (24): 1. Post-checkout success, 2. Activation success, 3. Activation error, 4–6. Expiry & shop error notices (unchanged body copy), Acceptance criteria, Build, code:block1 (┌───────────────────────────────────────────────────────────), code:js ({) (+16 more)

### Community 48 - "Community 48"

Cohesion: 0.11
Nodes (11): is_a_placement(), get_parent(), get_parent_entity_name(), get_root_placement(), get_status(), get_type(), has_parent(), is_parent_group() (+3 more)

### Community 51 - "Community 51"

Cohesion: 0.15
Nodes (14): Ad_Factory, wp_advads_ad_query(), wp_advads_create_ad_type(), wp_advads_get_ad_repository(), wp_advads_get_ad_type(), wp_advads_get_ad_type_manager(), wp_advads_get_ad_types(), wp_advads_get_ads_by_ids() (+6 more)

### Community 53 - "Community 53"

Cohesion: 0.17
Nodes (18): AutoUpdateModal(), LicenseField(), LicenseItem(), LicenseStatus(), SitesModal(), canUpgradeLicensePlan(), formatLicenseDate(), getAllowedUpgradePlanIds() (+10 more)

### Community 54 - "Community 54"

Cohesion: 0.13
Nodes (11): cookie_exists(), count_up(), find_wrapper(), fix_element(), get_cookie(), max_per_session(), move(), set_cookie() (+3 more)

### Community 62 - "Community 62"

Cohesion: 0.21
Nodes (18): DownloadActivateButton(), activateAddonFromLicense(), activateLicenseOnShop(), addLicenseAndSave(), applyLicensesPayloadToStore(), deactivateAddonFromLicense(), deactivateLicenseOnSite(), extractApiErrorMessage() (+10 more)

### Community 63 - "Community 63"

Cohesion: 0.13
Nodes (9): searchResults(), fillInputs(), getAdData(), QuickBulkEdit(), disable(), submitEditPlacement(), submitNewPlacement(), handleSelectChange() (+1 more)

### Community 64 - "Community 64"

Cohesion: 0.1
Nodes (20): 1. Problem statement, 2. Success criteria, 3.1 `Ad_Factory::get_ad()` — remove dead return, 3.2 `Ad_Repository::get_ads_by_type()` — implement stub, 3.3 `migrate_values()` — skip when already migrated, 3.4 `Ad_Content::prepare_frontend_output()` — remove dead branch, 3. Production fixes (approved), 4.1 New: `tests/Unit/Ads/RepositoryTest.php` (+12 more)

### Community 67 - "Community 67"

Cohesion: 0.15
Nodes (11): lockScroll(), \_measureScrollbar(), modal(), openDialog(), screenOptions(), tabs(), createIconByType(), createToast() (+3 more)

### Community 68 - "Community 68"

Cohesion: 0.1
Nodes (19): Acceptance criteria, Architecture, code:block1 (┌───────────────────────────────────────────────────────────), code:block2 (advanced-ads-app-licenses (read)), code:php (if flat_map_retired → return), Decisions, Edge cases, Error handling (+11 more)

### Community 69 - "Community 69"

Cohesion: 0.1
Nodes (19): Acceptance criteria, `advanced-ads-app-licenses` — unchanged rich shape, `advanced-ads-licenses` — site activation map (new shape), After migration (target), Before migration (legacy), Code touchpoints, code:php ([), code:php ([) (+11 more)

### Community 75 - "Community 75"

Cohesion: 0.11
Nodes (18): code:php (public function test_normalize_activation_map_from_legacy_st), code:php (public function test_build_activation_map_from_legacy(): voi), code:php (public function test_delete_legacy_addon_mirror_options(): v), code:php ($activation = License_Utils::normalize_activation_map( get_o), code:php (public function test_get_addon_key_map_from_activation_map_w), code:bash (vendor/bin/phpunit tests/Unit/License/LicenseTest.php), File map, License Storage Simplification — Implementation Plan (+10 more)

### Community 76 - "Community 76"

Cohesion: 0.11
Nodes (18): 1. Problem statement, 2. Success criteria, 3.1 Tracking add-on — query JOIN, 3.2 Tracking add-on — request-scoped priming, 3.3 Core — request-scoped registry, 3.4 Core — stat accessors, 3.5 Tracking add-on — column UI, 3. Architecture (as implemented) (+10 more)

### Community 77 - "Community 77"

Cohesion: 0.11
Nodes (18): 1. Problem statement, 2. Success criteria, 3.1 Cache helper (`AdvancedAds\Utilities\Cache`), 3.2 Repository list cache, 3.3 Batch hydration (C5), 3.4 Factory instance cache (C6), 3.5 Invalidation (`AdvancedAds\Cache_Invalidator`), 3. Architecture (+10 more)

### Community 78 - "Community 78"

Cohesion: 0.24
Nodes (14): get_the_placement(), wp_advads_create_new_placement(), wp_advads_create_placement_type(), wp_advads_delete_placement(), wp_advads_get_placement(), wp_advads_get_placement_by_id(), wp_advads_get_placement_by_slug(), wp_advads_get_placement_factory() (+6 more)

### Community 81 - "Community 81"

Cohesion: 0.22
Nodes (13): AddonRowActions(), AddonsList(), getIncludedAddonsForLicense(), getManualInstallGuideUrl(), getAddonInstallState(), getAddonMapKey(), getAddonRowStatus(), getLicenseNameForKey() (+5 more)

### Community 82 - "Community 82"

Cohesion: 0.11
Nodes (17): 1. Problem statement, 2. Success criteria, 3. Existing test stack (baseline — do not replace), 4.1 Master findings document, 4.2 Machine-readable appendix, 4.3 Optional visual heat map, 4. Deliverables, 5.1 Wave B — Inventory and signals (first) (+9 more)

### Community 90 - "Community 90"

Cohesion: 0.12
Nodes (15): `Advanced_Ads_Admin_Licenses` integration (recommended approach), `AdvancedAds\License\License` responsibilities, Current state (summary), Data model, Error handling and security, Goals, Identity mapping, License class and legacy migration — design spec (+7 more)

### Community 91 - "Community 91"

Cohesion: 0.12
Nodes (15): A — Architecture and heat map, B — Inventory and automation, Baseline run (2026-05-13), C — Security and compliance, CI recommendations, Codebase health report, Deep dives (worst N%), Duplication and structural debt (+7 more)

### Community 94 - "Community 94"

Cohesion: 0.15
Nodes (5): Advanced_Ads_Gutenberg, get_the_ad(), the_ad(), wp_advads_delete_ad(), wp_advads_get_ad()

### Community 95 - "Community 95"

Cohesion: 0.24
Nodes (3): Placement_Type, wp_advads_get_ad_summaries(), wp_advads_get_placement_summaries()

### Community 100 - "Community 100"

Cohesion: 0.19
Nodes (9): $(), advads_disable_license_buttons(), advads_show_placement_content_xpath_field(), error(), printAlerts(), success(), open(), handleAddAdToGroup() (+1 more)

### Community 101 - "Community 101"

Cohesion: 0.2
Nodes (6): deleteGroup(), disable(), submitNewGroup(), submitUpdateGroup(), listShowMore(), sortAds()

### Community 110 - "Community 110"

Cohesion: 0.19
Nodes (5): Congrats(), CongratsHeader(), getEditButton(), getLiveHeading(), adminUrl()

### Community 111 - "Community 111"

Cohesion: 0.15
Nodes (12): ATTACK FLOW, Cause — incomplete fix (Pattern 4), code:php (// class-shortcodes.php — single-pass regex sanitization (th), code:php (// class-ad-plain.php — the eval sink), code:text ([concat_bypass] raw : <<?php?>?php echo "RCE*PROOF*" . (7\*6)), code:text (attribute: content -> prepared content = [<?php e), code:text ([the_ad id=66 content="<<?php?>?php echo 31337;"]), code:text (GET http://localhost:3005/aa-rce-poc2/ (HTTP 200)) (+4 more)

### Community 112 - "Community 112"

Cohesion: 0.15
Nodes (12): code:bash (cd c:/laragon/www/monetize/wp-content/plugins/advanced-ads), code:bash (npm run test:playwright -- tests/Acceptance/Admin/Licenses/l), code:bash (npm run build), Conditional Post-Checkout Notice — Implementation Plan, File map, Out of scope (do not implement), Spec coverage checklist, Task 1: Copy-selection helpers (`utils.js`) (+4 more)

### Community 115 - "Community 115"

Cohesion: 0.21
Nodes (8): wp_advads_get_ads_by_group_id(), wp_advads_get_all_ads(), wp_advads_get_all_groups(), wp_advads_get_group_repository(), wp_advads_get_group_summaries(), wp_advads_get_groups_by_ad_id(), wp_advads_get_groups_by_ids(), advads_migrate_groups()

### Community 119 - "Community 119"

Cohesion: 0.2
Nodes (5): advads_display_condition_option_not_selected(), advads_post_search(), close(), source(), success()

### Community 125 - "Community 125"

Cohesion: 0.2
Nodes (3): App(), initialState(), StepFooter()

### Community 126 - "Community 126"

Cohesion: 0.26
Nodes (7): FeatureList(), PricingModal(), PricingTable(), PricingTableItem(), buildShopCheckoutUrl(), getCheckoutIdsForPlan(), startShopCheckoutForPlan()

### Community 127 - "Community 127"

Cohesion: 0.17
Nodes (11): Admin Screens (React SPAs), Advanced Ads — Tech Stack, Backend — PHP, CI/CD — GitHub Actions, Code Quality, code:block1 (src/ PSR-4 namespaced (Advanced_Ads\) — n), Frontend — JavaScript / React, PHP Architecture Layers (+3 more)

### Community 136 - "Community 136"

Cohesion: 0.27
Nodes (5): advads_ad_health_maybe_remove_list(), advads_ad_health_reload_number_in_menu(), advads_ad_health_reload_show_link(), advads_ad_health_show_hidden(), advads_display_ad_health_notices()

### Community 162 - "Community 162"

Cohesion: 0.2
Nodes (4): Footer(), Header(), assetsUrl(), useWizard()

### Community 163 - "Community 163"

Cohesion: 0.24
Nodes (6): clsx(), Accordion(), AllAccessAddonsSummary(), Card(), getAllAccessAddonsInstallSummary(), getAllAccessAddonsSummaryLabel()

### Community 174 - "Community 174"

Cohesion: 0.33
Nodes (6): exit(), hide(), init(), show(), submitOAuthCode(), switchContent()

### Community 178 - "Community 178"

Cohesion: 0.25
Nodes (5): wp_advads_get_all_placements(), wp_advads_get_placement_repository(), wp_advads_get_placements(), wp_advads_get_placements_dropdown(), wp_advads_placements_by_item_id()

### Community 179 - "Community 179"

Cohesion: 0.32
Nodes (3): Ad_Renderer, the_ad_placement(), wp_advads_get_placements_by_types()

### Community 197 - "Community 197"

Cohesion: 0.25
Nodes (6): 1. Think Before Coding, 2. Simplicity First, 3. Surgical Changes, 4. Goal-Driven Execution, 5. Graphify, code:block1 (1. [Step] → verify: [check])

### Community 198 - "Community 198"

Cohesion: 0.25
Nodes (7): Support Page Playwright Tests Implementation Plan, Task 1: Mocks and page helpers, Task 2: Smoke specs (1.1–1.5), Task 3: Interaction specs (2.1–2.4), Task 4: Unlicensed specs (3.1–3.2), Task 5: Licensed specs (4.1–4.3), Task 6: Verify

### Community 199 - "Community 199"

Cohesion: 0.25
Nodes (7): Acceptance, Data flow, Files, Goal, Plan mapping, Pricing modal — disable current plan button, UI

### Community 216 - "Community 216"

Cohesion: 0.43
Nodes (5): GoogleAdsense(), authUrl(), getErrorMessage(), hasAuthCode(), submitCode()

### Community 217 - "Community 217"

Cohesion: 0.43
Nodes (3): openTabByHash(), getUsableVersions(), versionControl()

### Community 218 - "Community 218"

Cohesion: 0.62
Nodes (5): getFilteredClasses(), getPath(), getSiblingIndex(), getXPath(), hasDigit()

### Community 219 - "Community 219"

Cohesion: 0.29
Nodes (6): 1. Entity abstraction family, 2. Function barrels, 3. Display / frontend checks, 4. Build artifact noise, Automated clone detection, Duplication signals (Wave B — structural)

### Community 229 - "Community 229"

Cohesion: 0.33
Nodes (4): advads_can_display_ads(), advads_is_amp(), group_has_ads(), placement_has_ads()

### Community 245 - "Community 245"

Cohesion: 0.33
Nodes (5): Ad List Stats Query — Implementation Record, Commits, Goal, Verification, What was built

### Community 256 - "Community 256"

Cohesion: 0.6
Nodes (3): getCurrentAppPath(), normalizeAppPath(), syncAppSubmenuCurrent()

### Community 257 - "Community 257"

Cohesion: 0.4
Nodes (4): Next pass (recommended), Security checklist results (Wave C — sample-based), Summary, `unserialize` / `maybe_unserialize` (first-party highlights)

### Community 258 - "Community 258"

Cohesion: 0.83
Nodes (3): advads_get_existing_placement_posts(), advads_upgrade_2_0_0_make_backup(), advads_upgrade_2_0_0_placement_migration()

## Knowledge Gaps

-   **484 isolated node(s):** `Constants`, `Placement_Sidebar_Widget`, `Placement_Footer`, `Placement_Content`, `Placement_Header` (+479 more)
    These have ≤1 connection - possible missing edges or undocumented components.
-   **209 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.

## Suggested Questions

_Questions this graph is uniquely positioned to answer:_

-   **Why does `Conditional` connect `Community 8` to `Community 128`, `Community 129`, `Community 133`, `Community 134`, `Community 7`, `Community 5`, `Community 261`, `Community 6`, `Community 139`, `Community 12`, `Community 20`, `Community 23`, `Community 24`, `Community 25`, `Community 154`, `Community 155`, `Community 156`, `Community 157`, `Community 29`, `Community 31`, `Community 32`, `Community 33`, `Community 159`, `Community 161`, `Community 164`, `Community 165`, `Community 168`, `Community 42`, `Community 46`, `Community 49`, `Community 182`, `Community 183`, `Community 56`, `Community 184`, `Community 65`, `Community 193`, `Community 194`, `Community 200`, `Community 74`, `Community 78`, `Community 207`, `Community 80`, `Community 209`, `Community 85`, `Community 92`, `Community 97`, `Community 98`, `Community 99`, `Community 228`, `Community 229`, `Community 230`, `Community 102`, `Community 109`, `Community 251`, `Community 117`, `Community 246`, `Community 247`, `Community 120`, `Community 250`, `Community 123`, `Community 252`?**
    _High betweenness centrality (0.105) - this node is a cross-community bridge._
-   **Why does `License` connect `Community 3` to `Community 71`, `Community 10`, `Community 15`, `Community 240`, `Community 180`, `Community 21`, `Community 89`, `Community 31`?**
    _High betweenness centrality (0.038) - this node is a cross-community bridge._
-   **Why does `wp_advads()` connect `Community 42` to `Community 1`, `Community 2`, `Community 5`, `Community 134`, `Community 12`, `Community 23`, `Community 25`, `Community 154`, `Community 155`, `Community 156`, `Community 29`, `Community 159`, `Community 32`, `Community 164`, `Community 38`, `Community 169`, `Community 178`, `Community 51`, `Community 50`, `Community 183`, `Community 56`, `Community 184`, `Community 58`, `Community 193`, `Community 194`, `Community 72`, `Community 78`, `Community 207`, `Community 208`, `Community 85`, `Community 106`, `Community 115`, `Community 121`, `Community 124`?**
    _High betweenness centrality (0.035) - this node is a cross-community bridge._
-   **Are the 127 inferred relationships involving `Conditional` (e.g. with `.run_checks()` and `.init()`) actually correct?**
    _`Conditional` has 127 INFERRED edges - model-reasoned connections that need verification._
-   **Are the 47 inferred relationships involving `Advanced_Ads` (e.g. with `.notices_enabled()` and `.__construct()`) actually correct?**
    _`Advanced_Ads` has 47 INFERRED edges - model-reasoned connections that need verification._
-   **Are the 39 inferred relationships involving `License_Utils` (e.g. with `.get_list()` and `.persist()`) actually correct?**
    _`License_Utils` has 39 INFERRED edges - model-reasoned connections that need verification._
-   **What connects `Constants`, `Placement_Sidebar_Widget`, `Placement_Footer` to the rest of the system?**
    _484 weakly-connected nodes found - possible documentation gaps or missing edges._
