Every top-level module in src/cemaf/ as a node — including the cemaf root API facade. Every static cross-module import as a directed edge, aggregated per pair (dynamic importlib loads aren't edges). Node size = lines of code. AST-exact — regenerate with build_graph_data.py, verify with --check.