{
  "directed": true,
  "multigraph": false,
  "graph": {},
  "nodes": [
    {
      "_origin": "curated_architecture",
      "community": 1,
      "file_type": "concept",
      "label": "Browser GUI",
      "layer": "control",
      "norm_label": "browser gui",
      "soc": "SoC1/browser",
      "source_file": "dl48-software/gui/app/net.js",
      "source_location": "L1",
      "status": "current",
      "id": "gui",
      "community_name": "Community 1"
    },
    {
      "_origin": "curated_architecture",
      "community": 1,
      "file_type": "concept",
      "label": "web-key-server",
      "layer": "control/state",
      "norm_label": "web-key-server",
      "soc": "SoC1",
      "source_file": "dl48-software/web-key-server/web-key-server.cpp",
      "source_location": "L1",
      "status": "current",
      "id": "wks",
      "community_name": "Community 1"
    },
    {
      "_origin": "curated_architecture",
      "community": 2,
      "file_type": "concept",
      "label": "mixer-osc",
      "layer": "third-party control bridge",
      "norm_label": "mixer-osc",
      "soc": "SoC1",
      "source_file": "dl48-software/mixer-osc/cmd/mixer-osc/main.go",
      "source_location": "L1",
      "status": "current",
      "id": "mixer_osc",
      "community_name": "Community 2"
    },
    {
      "_origin": "curated_architecture",
      "community": 0,
      "file_type": "concept",
      "label": "dsp-stack-netmedia",
      "layer": "media I/O",
      "norm_label": "dsp-stack-netmedia",
      "soc": "SoC1",
      "source_file": "dl48-software/dsp-stack-ng/tools/netmedia-daemon/main.cpp",
      "source_location": "L1",
      "status": "current",
      "id": "netmedia",
      "community_name": "Community 0"
    },
    {
      "_origin": "curated_architecture",
      "community": 0,
      "file_type": "concept",
      "label": "dsp-stack-ng",
      "layer": "mixer/audio DSP",
      "norm_label": "dsp-stack-ng",
      "soc": "SoC3",
      "source_file": "dl48-software/dsp-stack-ng/dsp-stack-main.cpp",
      "source_location": "L1",
      "status": "current",
      "id": "dsp",
      "community_name": "Community 0"
    },
    {
      "_origin": "curated_architecture",
      "community": 1,
      "file_type": "concept",
      "label": "RT1021 fader firmware",
      "layer": "control surface firmware",
      "norm_label": "rt1021 fader firmware",
      "soc": "RT1021",
      "source_file": "dl48-fader-board/source/main.cpp",
      "source_location": "L1",
      "status": "current",
      "id": "fader",
      "community_name": "Community 1"
    },
    {
      "_origin": "curated_architecture",
      "community": 0,
      "file_type": "concept",
      "label": "Dante DEP endpoint",
      "layer": "network audio endpoint",
      "norm_label": "dante dep endpoint",
      "soc": "SoC2",
      "source_file": "meta-rode-bsp/recipes-multimedia/dante/files/dante-init",
      "source_location": "L1",
      "status": "current",
      "id": "dep",
      "community_name": "Community 0"
    },
    {
      "_origin": "curated_architecture",
      "community": 0,
      "file_type": "concept",
      "label": "UAC2 kernel surface",
      "layer": "USB audio endpoint candidate",
      "norm_label": "uac2 kernel surface",
      "soc": "DL48 SoC2 placement unverified",
      "source_file": "dl48-linux/drivers/usb/gadget/function/f_uac2.c",
      "source_location": "L1",
      "status": "generic surface in current SB24 branch; DL48 startup/deployment not proven",
      "id": "uac2",
      "community_name": "Community 0"
    },
    {
      "_origin": "curated_architecture",
      "community": 0,
      "file_type": "concept",
      "label": "SPDIF-over-I2S module",
      "layer": "audio device driver",
      "norm_label": "spdif-over-i2s module",
      "soc": "T527",
      "source_file": "spdif-over-i2s/spdif_over_i2s.c",
      "source_location": "L1",
      "status": "current",
      "id": "spdif",
      "community_name": "Community 0"
    },
    {
      "_origin": "curated_architecture",
      "community": 0,
      "file_type": "concept",
      "label": "per-soc-init",
      "layer": "runtime ownership",
      "norm_label": "per-soc-init",
      "soc": "SoC1/2/3",
      "source_file": "meta-rode-bsp/recipes-support/per-soc-init/files/per-soc-init",
      "source_location": "L22",
      "status": "current",
      "id": "per_soc",
      "community_name": "Community 0"
    },
    {
      "_origin": "curated_architecture",
      "community": 2,
      "file_type": "concept",
      "label": "DL48 SoC1 packagegroup",
      "layer": "image composition",
      "norm_label": "dl48 soc1 packagegroup",
      "soc": "build",
      "source_file": "meta-rode-bsp/recipes-core/packagegroups/dl48-soc1-packagegroup.inc",
      "source_location": "L17",
      "status": "current",
      "id": "packagegroup",
      "community_name": "Community 2"
    },
    {
      "_origin": "curated_architecture",
      "community": 3,
      "file_type": "concept",
      "label": "SB24 T527 kernel integration",
      "layer": "BSP/kernel",
      "norm_label": "sb24 t527 kernel integration",
      "soc": "SB24 single ARM",
      "source_file": "dl48-linux/arch/arm64/boot/dts/allwinner/sun55i-t527-mackiesb24.dts",
      "source_location": "L1",
      "status": "current exact SB24 branch; separate from DL48 runtime",
      "id": "kernel",
      "community_name": "Community 3"
    },
    {
      "_origin": "curated_architecture",
      "community": 4,
      "file_type": "concept",
      "label": "DL48 T527 U-Boot integration",
      "layer": "boot firmware",
      "norm_label": "dl48 t527 u-boot integration",
      "soc": "T527/DL48",
      "source_file": "u-boot/dts/upstream/src/arm64/allwinner/dl48.dts",
      "source_location": "L1",
      "status": "current",
      "id": "uboot",
      "community_name": "Community 4"
    },
    {
      "_origin": "curated_architecture",
      "community": 2,
      "file_type": "concept",
      "label": "Debug dashboard",
      "layer": "diagnostics/control",
      "norm_label": "debug dashboard",
      "soc": "SoC1",
      "source_file": "dl48-software/debug-dashboard/backend/dashboard.py",
      "source_location": "L1",
      "status": "current",
      "id": "dl48_software_debug_dashboard_backend_dashboard",
      "community_name": "Community 2"
    },
    {
      "_origin": "curated_architecture",
      "community": 1,
      "file_type": "concept",
      "label": "Upgrade daemon",
      "layer": "firmware update",
      "norm_label": "upgrade daemon",
      "soc": "SoC1",
      "source_file": "dl48-software/upgradedaemon/upgradedaemon.nim",
      "source_location": "L1",
      "status": "current",
      "id": "upgrader",
      "community_name": "Community 1"
    }
  ],
  "links": [
    {
      "_origin": "curated_architecture",
      "bidirectional": true,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "Browser GUI consumes Data keys and emits command IDs through the WKS WebSocket protocol.",
      "relation": "websocket_state_and_commands",
      "source_file": "dl48-software/gui/app/net.js",
      "source_location": "L1",
      "status": "current",
      "weight": 1.0,
      "source": "gui",
      "target": "wks"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": true,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "DSP graph/runtime parameters and mixer state cross the WKS/DSP process boundary.",
      "relation": "state_parameter_protocol",
      "source_file": "dl48-software/dsp-stack-ng/websocket.cpp",
      "source_location": "L1",
      "status": "current",
      "weight": 1.0,
      "source": "wks",
      "target": "dsp"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": true,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "WKS converts RT1021 JSON events into GUI/Data actions and publishes surface state back to firmware.",
      "relation": "json_serial_bridge",
      "source_file": "dl48-software/web-key-server/keystore.cpp",
      "source_location": "L40",
      "status": "current",
      "weight": 1.0,
      "source": "wks",
      "target": "fader"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": false,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "The product control plane invokes and reports firmware update behavior through the upgrade service path.",
      "relation": "firmware_update_control",
      "source_file": "dl48-software/upgradedaemon/upgradedaemon.nim",
      "source_location": "L1",
      "status": "current",
      "weight": 1.0,
      "source": "wks",
      "target": "upgrader"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": false,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "OSC/UDP requests are translated to WKS key/command traffic on TCP port 89.",
      "relation": "osc_to_wks_tcp",
      "source_file": "meta-rode-bsp/recipes-support/per-soc-init/files/per-soc-init",
      "source_location": "L22",
      "status": "current",
      "weight": 1.0,
      "source": "mixer_osc",
      "target": "wks"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": true,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "The media daemon owns decode/record/file I/O while mixergraph NetStream blocks terminate the DSP side.",
      "relation": "network_media_audio",
      "source_file": "dl48-software/dsp-stack-ng/tools/netmedia-daemon/main.cpp",
      "source_location": "L1",
      "status": "current",
      "weight": 1.0,
      "source": "netmedia",
      "target": "dsp"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": true,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "Dante endpoint audio must cross the SoC2\u2194SoC3 10.10.10.x Ethernet plane.",
      "relation": "mandatory_internal_ethernet_audio",
      "source_file": "meta-rode-bsp/recipes-multimedia/dante/files/dante-init",
      "source_location": "L1",
      "status": "required bridge; implementation incomplete",
      "weight": 1.0,
      "source": "dep",
      "target": "dsp"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": true,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "Project architecture places USB audio on SoC2, but this corpus proves only a generic UAC2 kernel surface from the SB24 branch; DL48 SoC2 startup and the bridge to SoC3 remain unproven.",
      "relation": "candidate_internal_ethernet_audio",
      "source_file": "dl48-linux/drivers/usb/gadget/function/f_uac2.c",
      "source_location": "L1",
      "status": "required architecture; placement/startup/bridge unverified",
      "weight": 1.0,
      "source": "uac2",
      "target": "dsp"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": true,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "The standalone kernel module exposes the SPDIF/I2S PCM device consumed by product audio software.",
      "relation": "alsa_audio_device",
      "source_file": "spdif-over-i2s/spdif_over_i2s.c",
      "source_location": "L1",
      "status": "current",
      "weight": 1.0,
      "source": "spdif",
      "target": "dsp"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": false,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "SoC3 startup launches dsp-stack-ng.",
      "relation": "starts_on_soc3",
      "source_file": "meta-rode-bsp/recipes-support/per-soc-init/files/per-soc-init",
      "source_location": "L82",
      "status": "current",
      "weight": 1.0,
      "source": "per_soc",
      "target": "dsp"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": false,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "SoC1 startup waits for WKS before launching mixer-osc.",
      "relation": "starts_on_soc1_after_wks",
      "source_file": "meta-rode-bsp/recipes-support/per-soc-init/files/per-soc-init",
      "source_location": "L22",
      "status": "current",
      "weight": 1.0,
      "source": "per_soc",
      "target": "mixer_osc"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": false,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "SoC1 startup launches dsp-stack-netmedia.",
      "relation": "starts_on_soc1",
      "source_file": "meta-rode-bsp/recipes-support/per-soc-init/files/per-soc-init",
      "source_location": "L62",
      "status": "current",
      "weight": 1.0,
      "source": "per_soc",
      "target": "netmedia"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": false,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "The SoC1 packagegroup includes the debug dashboard package.",
      "relation": "image_contains",
      "source_file": "meta-rode-bsp/recipes-core/packagegroups/dl48-soc1-packagegroup.inc",
      "source_location": "L37",
      "status": "current",
      "weight": 1.0,
      "source": "packagegroup",
      "target": "dl48_software_debug_dashboard_backend_dashboard"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": false,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "The SoC1 packagegroup includes mixer-osc.",
      "relation": "image_contains",
      "source_file": "meta-rode-bsp/recipes-core/packagegroups/dl48-soc1-packagegroup.inc",
      "source_location": "L36",
      "status": "current",
      "weight": 1.0,
      "source": "packagegroup",
      "target": "mixer_osc"
    },
    {
      "_origin": "curated_architecture",
      "bidirectional": false,
      "confidence": "INFERRED",
      "confidence_score": 0.95,
      "context": "The SoC1 packagegroup includes web-key-server.",
      "relation": "image_contains",
      "source_file": "meta-rode-bsp/recipes-core/packagegroups/dl48-soc1-packagegroup.inc",
      "source_location": "L34",
      "status": "current",
      "weight": 1.0,
      "source": "packagegroup",
      "target": "wks"
    }
  ],
  "hyperedges": []
}