Files
astro-website/graphify-out/GRAPH_REPORT.md

22 KiB

Graph Report - . (2026-04-19)

Corpus Check

  • 177 files · ~197,362 words
  • Verdict: corpus is large enough that graph structure adds value.

Summary

  • 235 nodes · 221 edges · 57 communities detected
  • Extraction: 89% EXTRACTED · 11% INFERRED · 0% AMBIGUOUS · INFERRED: 25 edges (avg confidence: 0.76)
  • Token cost: 0 input · 0 output

Community Hubs (Navigation)

God Nodes (most connected - your core abstractions)

  1. 2026-02-10 lighthouse fixes change - 13 edges
  2. main() - 10 edges
  3. createCacheFromEnv() - 8 edges
  4. media-modal capability - 7 edges
  5. run() - 6 edges
  6. normalizeWordpressPost() - 6 edges
  7. fast-website - 6 edges
  8. Three-theme system (dark/light/high-contrast) - 6 edges
  9. log() - 5 edges
  10. normalizeWordpressPage() - 5 edges

Surprising Connections (you probably didn't know these)

  • Favicon SVG stylized S mark --supports_branding--> SEO-first content aggregation website [INFERRED] site/public/favicon.svg → README.md
  • run() --calls--> log() [INFERRED] site\scripts\run-lighthouse.ts → site\scripts\fetch-content.ts
  • createCacheFromEnv() --calls--> log() [INFERRED] site\src\lib\cache\index.ts → site\scripts\fetch-content.ts
  • main() --calls--> getIngestConfigFromEnv() [INFERRED] site\scripts\fetch-content.ts → site\src\lib\config.ts
  • main() --calls--> createCacheFromEnv() [INFERRED] site\scripts\fetch-content.ts → site\src\lib\cache\index.ts

Hyperedges (group relationships)

  • Theme notch incident bundle — doc_diag_complete, doc_diag_summary, doc_prod_diagnosis, issue_theme_notch_production_unstyled, cause_stale_production_css, fix_rebuild_redeploy_docker [INFERRED 0.90]
  • Lighthouse gate contract — capability_lighthouse_quality_gate, concept_lighthouse_gate_100, concept_theme_system, concept_service_worker_caching, concept_layout_shift_prevention [EXTRACTED 0.90]
  • Media modal implementation bundle — capability_media_modal, concept_native_dialog_modal, concept_iframe_src_reset, concept_cards_as_buttons, concept_data_attributes_modal, concept_modal_embed_urls, concept_wcag_modal_accessibility, concept_umami_media_preview, concept_modal_cta_tracking [EXTRACTED 0.90]
  • Theme persistence bundle — change_remember_theme, concept_theme_persistence, concept_theme_precedence_order, concept_site_theme_cookie, concept_theme_switch_event, concept_theme_switch_payload, concept_no_restore_event [EXTRACTED 0.90]

Communities

Community 0 - "Layout Persistence Branding"

Cohesion: 0.08 Nodes (25): lighthouse-quality-gate capability, Accessible semantic controls, deterministic lighthouse gate, Layout shift prevention, prefers-reduced-motion handling, theme persistence across visits, Theme persistence with localStorage/cookie fallback, theme_switch umami event (+17 more)

Community 1 - "Concept Modal Youtube"

Cohesion: 0.12 Nodes (18): media-modal capability, 2026-02-10 lighthouse fixes change, youtube iframe api endpoint, video/podcast cards as button triggers, concept crawlable anchors, concept csp header alignment, concept dark theme contrast tokens, data-* attribute flow from cards to modal (+10 more)

Community 2 - "Main Getingestconfigfromenv Getpublicconfig"

Cohesion: 0.18 Nodes (11): getIngestConfigFromEnv(), dedupe(), log(), main(), normalizeSpotifyEpisodeUrl(), readPodcastSpotifyOverrideMap(), writeAtomic(), readInstagramEmbedPosts() (+3 more)

Community 3 - "Wordpress Decodeentities Fetchallpages"

Cohesion: 0.27 Nodes (10): decodeEntities(), fetchWordpressContent(), getAuthHeaders(), mapCategoryIds(), mapFeaturedImageUrl(), normalizeWordpressCategory(), normalizeWordpressPage(), normalizeWordpressPost() (+2 more)

Community 4 - "Cache Main Createcachefromenv"

Cohesion: 0.21 Nodes (7): log(), main(), createCacheFromEnv(), createNoopCache(), createRedisCache(), resolveDefaultTtlSecondsFromEnv(), resolveRedisUrlFromEnv()

Community 5 - "Highperformingyoutubevideos Instagramposts Newestitems"

Cohesion: 0.2 Nodes (4): highPerformingYoutubeVideos(), wordpressPosts(), wordpressPostsByCategorySlug(), youtubeVideos()

Community 6 - "Compute Sleep Cachedcompute"

Cohesion: 0.25 Nodes (7): compute(), sleep(), cachedCompute(), getArg(), hasFlag(), run(), startPreviewServerIfNeeded()

Community 7 - "Cache Slug Build"

Cohesion: 0.18 Nodes (11): blog-section-surface, build-time ingestion into content cache, site/content/cache/content.json, site/scripts/fetch-content.ts, Rationale: build-time cache keeps site fast and crawlable, /blog/category/ route, /blog route, /blog/page/ route (+3 more)

Community 8 - "Image Placeholder Load"

Cohesion: 0.2 Nodes (10): BaseLayout inline image load script, static placeholder on image error, fade-in on image load, image-lazy-loading, .img-error, .img-loading, .img-shimmer-wrap, no CLS from placeholder (+2 more)

Community 9 - "Website Repository Guidelines"

Cohesion: 0.22 Nodes (9): Repository Guidelines, SVG uses prefers-color-scheme dark fill override, Favicon SVG stylized S mark, lighthouse-quality-gate, nav-hover-line, theme-switcher-notch, OpenSpec schema spec-driven, fast-website (+1 more)

Community 10 - "Youtube Fetchyoutubeviaapi Fetchyoutubeviarss"

Cohesion: 0.36 Nodes (6): fetchYoutubeViaApi(), fetchYoutubeViaRss(), normalizeYoutubeApiVideos(), normalizeYoutubeRssFeedItems(), stripHtml(), truncate()

Community 11 - "Cacheputsafe Isget Isimagerequest"

Cohesion: 0.33 Nodes (0):

Community 12 - "Production Notch Styling"

Cohesion: 0.33 Nodes (6): Stale production CSS missing theme-notch rules, Production Theme Notch Styling Issue - Complete Diagnostic Report, Production Theme Notch Styling Issue - Executive Summary, Production Theme Notch Styling Issue - Diagnostic Report, Rebuild and redeploy Docker image, Theme notch unstyled on production

Community 13 - "Astro Blogpostcard Layout"

Cohesion: 0.33 Nodes (4): card-layout-system, views shown only when available, shared Card component, standard footer/meta row

Community 14 - "Getcachepath Readcontentcache Verify"

Cohesion: 0.5 Nodes (3): getCachePath(), readContentCache(), main()

Community 15 - "Fetchpodcastrss Normalizepodcastfeeditems Striphtml"

Cohesion: 0.6 Nodes (4): fetchPodcastRss(), normalizePodcastFeedItems(), stripHtml(), truncate()

Community 16 - "Target Data Umami"

Cohesion: 0.5 Nodes (4): data-umami-event attributes, placement, target_id, target_url

Community 17 - "Screenshot Review Santhoshj"

Cohesion: 0.67 Nodes (3): Performance Review — santhoshj.com, Blog page screenshot, Homepage screenshot

Community 18 - "Tests Listed Files"

Cohesion: 0.67 Nodes (3): Listed spec files missing in current workspace, site/tests/content.spec.ts, site/tests/yaml.spec.ts

Community 19 - "Service Worker Critical"

Cohesion: 0.67 Nodes (3): Critical-asset cache busting, Service worker caching lifecycle, Service worker performance spec

Community 20 - "Withutm"

Cohesion: 1.0 Nodes (0):

Community 21 - "Creatememorycache Memory Cache"

Cohesion: 1.0 Nodes (0):

Community 22 - "Readfeaturedvideoids Curation"

Cohesion: 1.0 Nodes (0):

Community 23 - "Read Umami Attributes"

Cohesion: 1.0 Nodes (0):

Community 24 - "Read Layout Test"

Cohesion: 1.0 Nodes (0):

Community 25 - "Read Title Type"

Cohesion: 1.0 Nodes (0):

Community 26 - "Umami Attributes Test"

Cohesion: 1.0 Nodes (0):

Community 27 - "Wcag Responsive Shell"

Cohesion: 1.0 Nodes (0):

Community 28 - "Normalized Schema Wordpress"

Cohesion: 1.0 Nodes (2): normalized wordpress internal schema, Rationale: normalized schema keeps UI simple and consistent

Community 29 - "Passwords Rationale Revocable"

Cohesion: 1.0 Nodes (2): Rationale: app passwords are revocable and safer operationally, WordPress application passwords

Community 30 - "Astro Config"

Cohesion: 1.0 Nodes (0):

Community 31 - "Community 31"

Cohesion: 1.0 Nodes (0):

Cohesion: 1.0 Nodes (0):

Community 33 - "Types"

Cohesion: 1.0 Nodes (0):

Community 34 - "Types"

Cohesion: 1.0 Nodes (0):

Community 35 - "Test"

Cohesion: 1.0 Nodes (0):

Community 36 - "Ingest Test"

Cohesion: 1.0 Nodes (0):

Community 37 - "Desktop Header Screenshot"

Cohesion: 1.0 Nodes (1): Desktop header screenshot

Community 38 - "Mobile Header Screenshot"

Cohesion: 1.0 Nodes (1): Mobile header screenshot

Community 39 - "Surface"

Cohesion: 1.0 Nodes (1): seo-content-surface

Community 40 - "Rationale Structure Keeps"

Cohesion: 1.0 Nodes (1): Rationale: route structure keeps URLs clear and stable

Community 41 - "Contentitem Summary Optional"

Cohesion: 1.0 Nodes (1): ContentItem.summary optional field

Community 42 - "Standardcard Astro"

Cohesion: 1.0 Nodes (0):

Community 43 - "Post Slug Astro"

Cohesion: 1.0 Nodes (1): blog/post/[slug].astro

Community 44 - "Slug Astro"

Cohesion: 1.0 Nodes (1): blog/page/[slug].astro

Community 45 - "Point Quality Gate"

Cohesion: 1.0 Nodes (1): Lighthouse 100-point quality gate

Community 46 - "Bounce Rate Reduction"

Cohesion: 1.0 Nodes (1): Bounce rate reduction intent

Community 47 - "Preview Modal Instead"

Cohesion: 1.0 Nodes (1): on-site media preview modal instead of outbound navigation

Community 48 - "Umami Preview Event"

Cohesion: 1.0 Nodes (1): umami media_preview event taxonomy

Community 49 - "Modal Tracking Click"

Cohesion: 1.0 Nodes (1): modal CTA tracking via cta_click taxonomy

Cohesion: 1.0 Nodes (1): theme precedence localStorage -> cookie -> environment signals

Cohesion: 1.0 Nodes (1): site_theme cookie fallback with long TTL

Community 52 - "Switch Event Automatic"

Cohesion: 1.0 Nodes (1): no theme_switch event on automatic restoration

Community 53 - "Surface"

Cohesion: 1.0 Nodes (1): SEO content surface spec

Community 54 - "Social Aggregation"

Cohesion: 1.0 Nodes (1): Social content aggregation spec

Community 55 - "Homepage Modules"

Cohesion: 1.0 Nodes (1): Homepage content modules spec

Community 56 - "Conversion Ctas"

Cohesion: 1.0 Nodes (1): Conversion CTAs spec

Knowledge Gaps

  • 78 isolated node(s): Repository Guidelines, OpenSpec schema spec-driven, theme-switcher-notch, nav-hover-line, lighthouse-quality-gate (+73 more) These have ≤1 connection - possible missing edges or undocumented components.
  • Thin community Withutm (2 nodes): url.ts, withUtm() Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Creatememorycache Memory Cache (2 nodes): createMemoryCache(), memory-cache.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Readfeaturedvideoids Curation (2 nodes): readFeaturedVideoIds(), curation.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Read Umami Attributes (2 nodes): read(), blog-umami-attributes.test.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Read Layout Test (2 nodes): read(), card-layout.test.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Read Title Type (2 nodes): read(), content-title-type-attributes.test.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Umami Attributes Test (2 nodes): umami-attributes.test.ts, read() Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Wcag Responsive Shell (2 nodes): wcag-responsive-shell.test.ts, read() Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Normalized Schema Wordpress (2 nodes): normalized wordpress internal schema, Rationale: normalized schema keeps UI simple and consistent Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Passwords Rationale Revocable (2 nodes): Rationale: app passwords are revocable and safer operationally, WordPress application passwords Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Astro Config (1 nodes): astro.config.mjs Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 31 (1 nodes): env.d.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Links (1 nodes): links.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Types (1 nodes): types.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Types (1 nodes): types.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Test (1 nodes): blog-nav.test.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Ingest Test (1 nodes): ingest.test.ts Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Desktop Header Screenshot (1 nodes): Desktop header screenshot Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Mobile Header Screenshot (1 nodes): Mobile header screenshot Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Surface (1 nodes): seo-content-surface Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Rationale Structure Keeps (1 nodes): Rationale: route structure keeps URLs clear and stable Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Contentitem Summary Optional (1 nodes): ContentItem.summary optional field Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Standardcard Astro (1 nodes): StandardCard.astro Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Post Slug Astro (1 nodes): blog/post/[slug].astro Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Slug Astro (1 nodes): blog/page/[slug].astro Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Point Quality Gate (1 nodes): Lighthouse 100-point quality gate Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Bounce Rate Reduction (1 nodes): Bounce rate reduction intent Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Preview Modal Instead (1 nodes): on-site media preview modal instead of outbound navigation Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Umami Preview Event (1 nodes): umami media_preview event taxonomy Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Modal Tracking Click (1 nodes): modal CTA tracking via cta_click taxonomy Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Precedence Localstorage Cookie (1 nodes): theme precedence localStorage -> cookie -> environment signals Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Cookie Fallback Long (1 nodes): site_theme cookie fallback with long TTL Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Switch Event Automatic (1 nodes): no theme_switch event on automatic restoration Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Surface (1 nodes): SEO content surface spec Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Social Aggregation (1 nodes): Social content aggregation spec Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Homepage Modules (1 nodes): Homepage content modules spec Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Conversion Ctas (1 nodes): Conversion CTAs spec Too small to be a meaningful cluster - may be noise or needs more connections extracted.

Suggested Questions

Questions this graph is uniquely positioned to answer:

  • Why does 2026-02-10 lighthouse fixes change connect Concept Modal Youtube to Layout Persistence Branding? High betweenness centrality (0.020) - this node is a cross-community bridge.
  • Why does prefers-reduced-motion handling connect Layout Persistence Branding to Concept Modal Youtube? High betweenness centrality (0.017) - this node is a cross-community bridge.
  • Why does main() connect Main Getingestconfigfromenv Getpublicconfig to Cache Main Createcachefromenv, Compute Sleep Cachedcompute? High betweenness centrality (0.012) - this node is a cross-community bridge.
  • Are the 4 inferred relationships involving main() (e.g. with getIngestConfigFromEnv() and createCacheFromEnv()) actually correct? main() has 4 INFERRED edges - model-reasoned connections that need verification.
  • Are the 7 inferred relationships involving createCacheFromEnv() (e.g. with main() and main()) actually correct? createCacheFromEnv() has 7 INFERRED edges - model-reasoned connections that need verification.
  • Are the 2 inferred relationships involving run() (e.g. with sleep() and log()) actually correct? run() has 2 INFERRED edges - model-reasoned connections that need verification.
  • What connects Repository Guidelines, OpenSpec schema spec-driven, theme-switcher-notch to the rest of the system? 78 weakly-connected nodes found - possible documentation gaps or missing edges.