[
  {
    "graph_key": "network_main",
    "title": "Main Network",
    "container_selector": "#cy",
    "graph_type": "cytoscape",
    "source_tables": [
      "miRNA_targets_scored.parquet",
      "genes.parquet",
      "miRNAs.parquet",
      "proteins.parquet"
    ],
    "required_filters": [
      "query",
      "direction",
      "top_n"
    ],
    "export_keys": [
      "01_network/graph_nodes_full.csv",
      "01_network/graph_edges_full.csv",
      "graph_network_main_*.png",
      "graph_network_main_*.svg"
    ],
    "common_misreads": [
      "Visual node position is layout-driven and not a statistical centrality measure.",
      "Edge density reflects selected query scope and top-N settings."
    ]
  },
  {
    "graph_key": "node_ev_sources",
    "title": "Node EV Evidence Sources",
    "container_selector": "#node-ev-source-chart",
    "graph_type": "svg-bar",
    "source_tables": [
      "ev_evidence.parquet",
      "publication_details.parquet"
    ],
    "required_filters": [
      "selected_node"
    ],
    "export_keys": [
      "02_node_details/node_ev_evidence.csv",
      "graph_node_ev_sources_*.png",
      "graph_node_ev_sources_*.svg"
    ],
    "common_misreads": [
      "Evidence rows are not the same as unique study count unless collapsed by publication ID.",
      "Bars are clickable filters for the EV evidence table; clear the active source filter before comparing totals across sources."
    ]
  },
  {
    "graph_key": "node_target_confidence",
    "title": "Node Target Confidence",
    "container_selector": "#node-target-confidence-chart",
    "graph_type": "svg-distribution",
    "source_tables": [
      "miRNA_targets_scored.parquet"
    ],
    "required_filters": [
      "selected_miRNA_node",
      "top_n"
    ],
    "export_keys": [
      "01_network/graph_edges_full.csv",
      "graph_node_target_confidence_*.png",
      "graph_node_target_confidence_*.svg"
    ],
    "common_misreads": [
      "Confidence_Score comparisons should be interpreted within a source/query context."
    ]
  },
  {
    "graph_key": "cellspec_lollipop",
    "title": "Cell Specificity Lollipop",
    "container_selector": "#cell-specificity-lollipop-container",
    "graph_type": "svg-lollipop",
    "source_tables": [
      "cell_specificity_unified.parquet"
    ],
    "required_filters": [
      "system_query",
      "selected_cells"
    ],
    "export_keys": [
      "04_cell_specificity/cell_specificity_ranking_full.csv",
      "graph_cellspec_lollipop_*.png",
      "graph_cellspec_lollipop_*.svg"
    ],
    "common_misreads": [
      "Top displayed cell types are a ranked subset, not the full candidate list.",
      "Lollipop dots are click shortcuts for table selection; always confirm final selected cells in the checkbox table/export."
    ]
  },
  {
    "graph_key": "cellspec_system",
    "title": "Cell Specificity by System",
    "container_selector": "#cell-specificity-system-container",
    "graph_type": "svg-bar",
    "source_tables": [
      "cell_specificity_unified.parquet"
    ],
    "required_filters": [
      "system_query"
    ],
    "export_keys": [
      "04_cell_specificity/cell_specificity_selected_cells.csv",
      "graph_cellspec_system_*.png",
      "graph_cellspec_system_*.svg"
    ],
    "common_misreads": [
      "System grouping aggregates multiple cell labels and should not be treated as a single-cell measurement.",
      "Bar clicks filter the table view only; export files still preserve the full underlying ranking rows."
    ]
  },
  {
    "graph_key": "cellcomm_chord",
    "title": "Cell Communication System Chord",
    "container_selector": "#cell-comm-chord-container",
    "graph_type": "svg-chord",
    "source_tables": [
      "ligand_receptor_pairs_full.parquet",
      "cell_specificity_unified.parquet"
    ],
    "required_filters": [
      "selected_cells"
    ],
    "export_keys": [
      "05_cell_communication/interactions_full.csv",
      "graph_cellcomm_chord_*.png",
      "graph_cellcomm_chord_*.svg"
    ],
    "common_misreads": [
      "Chord ribbon width represents aggregated communication score across selected cell type pairs.",
      "Ribbon click highlights are exploratory filters; they do not imply causal direction or experimental proof."
    ]
  },
  {
    "graph_key": "cellcomm_heatmap",
    "title": "Cell Communication Heatmap",
    "container_selector": "#cell-comm-heatmap-container",
    "graph_type": "svg-heatmap",
    "source_tables": [
      "ligand_receptor_pairs_full.parquet",
      "cell_specificity_unified.parquet",
      "miRNA_targets_scored.parquet"
    ],
    "required_filters": [
      "selected_cells",
      "detail_limit",
      "scoring_method"
    ],
    "export_keys": [
      "05_cell_communication/heatmap_matrix_full.csv",
      "05_cell_communication/interactions_full.csv",
      "graph_cellcomm_heatmap_*.png",
      "graph_cellcomm_heatmap_*.svg"
    ],
    "common_misreads": [
      "Heatmap color summarizes score, not interaction count alone.",
      "Visible interaction table can be capped while summaries are computed from a broader set."
    ]
  },
  {
    "graph_key": "lr_dot",
    "title": "L-R Dot Plot",
    "container_selector": "#lr-dot-container",
    "graph_type": "svg-dot",
    "source_tables": [
      "ligand_receptor_pairs_full.parquet",
      "genes.parquet"
    ],
    "required_filters": [
      "system_query"
    ],
    "export_keys": [
      "06_lr_analysis/query_as_ligands.csv",
      "graph_lr_dot_*.png",
      "graph_lr_dot_*.svg"
    ],
    "common_misreads": [
      "Each dot represents a confirmed L-R pair in the database; absent dots mean no curated interaction, not absence of biology.",
      "Click-selected pair detail is an interpretation aid; source badges indicate resource provenance, not assay validation status."
    ]
  },
  {
    "graph_key": "lr_bipartite",
    "title": "Ligand-Receptor Bipartite",
    "container_selector": "#lr-bipartite-container",
    "graph_type": "svg-bipartite",
    "source_tables": [
      "ligand_receptor_pairs_full.parquet",
      "genes.parquet"
    ],
    "required_filters": [
      "system_query",
      "interaction_cap"
    ],
    "export_keys": [
      "06_lr_analysis/query_as_ligands.csv",
      "06_lr_analysis/query_as_receptors.csv",
      "graph_lr_bipartite_*.png",
      "graph_lr_bipartite_*.svg"
    ],
    "common_misreads": [
      "Node crowding is a visualization limitation; use CSV for complete partner counts.",
      "Bipartite link click detail mirrors dot-plot pair detail and is best used with exported tables for exhaustive review."
    ]
  },
  {
    "graph_key": "pathway_dots",
    "title": "Enrichment Dot Plot",
    "container_selector": "#pathway-dot-container",
    "graph_type": "svg-dot",
    "source_tables": [
      "gene_pathways.parquet",
      "miRNA_targets_scored.parquet"
    ],
    "required_filters": [
      "pathway_sources",
      "p_value_cutoff",
      "query"
    ],
    "export_keys": [
      "07_pathway_analysis/pathways_full.csv",
      "graph_pathway_dots_*.png",
      "graph_pathway_dots_*.svg"
    ],
    "common_misreads": [
      "Dot size encodes gene overlap count; x-axis encodes -log10(p-value). Small dots near the significance line should be interpreted cautiously.",
      "Dot clicks open inline pathway detail for the rendered subset only; use exports for full pathway rows."
    ]
  },
  {
    "graph_key": "pathway_bars",
    "title": "Pathways by Category",
    "container_selector": "#bar-chart-container",
    "graph_type": "svg-grouped-bar",
    "source_tables": [
      "gene_pathways.parquet",
      "miRNA_targets_scored.parquet"
    ],
    "required_filters": [
      "pathway_sources",
      "p_value_cutoff",
      "query"
    ],
    "export_keys": [
      "07_pathway_analysis/pathways_full.csv",
      "07_pathway_analysis/pathways_filtered_view.csv",
      "graph_pathway_bars_*.png",
      "graph_pathway_bars_*.svg"
    ],
    "common_misreads": [
      "Only post-filter pathways are shown; changing source or p-value cutoff changes the denominator.",
      "Category ordering reflects filtered enrichment output, not ontology hierarchy.",
      "Category bar clicks open inline pathway accordions and do not modify backend enrichment calculations."
    ]
  },
  {
    "graph_key": "disease_lollipop",
    "title": "Top Scoring Diseases",
    "container_selector": "#disease-lollipop-container",
    "graph_type": "svg-lollipop",
    "source_tables": [
      "gene_disease_associations.parquet",
      "mirna_disease_associations.parquet"
    ],
    "required_filters": [
      "query"
    ],
    "export_keys": [
      "08_disease_analysis/disease_associations_full.csv",
      "graph_disease_lollipop_*.png",
      "graph_disease_lollipop_*.svg"
    ],
    "common_misreads": [
      "Score is DisGeNET combined score; teal/grey circle fill shows proportion of direct vs predicted evidence.",
      "Lollipop clicks navigate to grouped accordion evidence and rely on canonical disease grouping for traceability."
    ]
  },
  {
    "graph_key": "disease_catbar",
    "title": "Disease by MeSH Category",
    "container_selector": "#disease-chart-container",
    "graph_type": "svg-bar",
    "source_tables": [
      "gene_disease_associations.parquet",
      "mirna_disease_associations.parquet"
    ],
    "required_filters": [
      "disease_filter",
      "query"
    ],
    "export_keys": [
      "08_disease_analysis/disease_bubble_summary_full.csv",
      "08_disease_analysis/disease_associations_full.csv",
      "graph_disease_catbar_*.png",
      "graph_disease_catbar_*.svg"
    ],
    "common_misreads": [
      "Bar width shows disease count per MeSH category; click a bar to filter the evidence table below."
    ]
  },
  {
    "graph_key": "ppi_tree_panel",
    "title": "Right-Panel PPI Tree",
    "container_selector": "#ppi-tree-content",
    "graph_type": "ranked-list",
    "source_tables": [
      "string_interactions.parquet",
      "molecule_summary_data.parquet"
    ],
    "required_filters": [
      "selected_protein_node",
      "ppi_min_score",
      "ppi_tree_limit",
      "ppi_search",
      "ppi_overlay_enabled",
      "ppi_overlay_limit"
    ],
    "export_keys": [
      "09_ppi_analysis/ppi_tree_full.csv",
      "09_ppi_analysis/ppi_tree_view.csv"
    ],
    "common_misreads": [
      "The PPI tree is one-hop and view-capped for readability.",
      "The visible list can be filtered by score/search while full rows remain in export.",
      "If overlay is OFF, a partner row may not be visible in the main graph until projection is enabled."
    ]
  }
]