{
  "id": "testbed",
  "title": "Home test bed",
  "description": "Simulated cameras on the build server feed the appliance; agent webhooks come back to the receiver. Architecture, not health.",
  "scope": "Architecture, not live health. Evidence and status belong to inventory records.",
  "nodes": [
    {
      "id": "sn7d_jetnpd",
      "title": "Edge appliance sn7d-jetnpd",
      "kind": "host",
      "inventory_id": "host-sn7d-jetnpd",
      "status": "observed",
      "evidence": [
        "test-bed-discovery",
        "test-bed-runs"
      ],
      "source_page": "src/content/docs/hosts/sn7d-jetnpd.md",
      "page": "/hosts/sn7d-jetnpd/"
    },
    {
      "id": "sn7d_jetnpd.search_engine",
      "title": "search-engine",
      "kind": "service",
      "inventory_id": "service-nvr-search-engine",
      "status": "observed",
      "evidence": [
        "test-bed-discovery",
        "test-bed-runs"
      ],
      "source_page": "src/content/docs/hosts/sn7d-jetnpd.md",
      "page": "/hosts/sn7d-jetnpd/"
    },
    {
      "id": "sn1_1f0ccb",
      "title": "Build server sn1-1f0ccb",
      "kind": "host",
      "inventory_id": "host-sn1-1f0ccb",
      "status": "observed",
      "evidence": [
        "test-bed-discovery",
        "test-bed-runs"
      ],
      "source_page": "src/content/docs/hosts/sn1-1f0ccb.md",
      "page": "/hosts/sn1-1f0ccb/"
    },
    {
      "id": "sn7d_jetnpd.timescaledb",
      "title": "TimescaleDB",
      "kind": "service",
      "inventory_id": "service-nvr-timescaledb",
      "status": "observed",
      "evidence": [
        "test-bed-discovery",
        "test-bed-runs"
      ],
      "source_page": "src/content/docs/hosts/sn7d-jetnpd.md",
      "page": "/hosts/sn7d-jetnpd/"
    },
    {
      "id": "sn1_1f0ccb.simulator",
      "title": "Camera simulator",
      "kind": "service",
      "inventory_id": "service-camera-simulator",
      "status": "observed",
      "evidence": [
        "test-bed-discovery",
        "test-bed-runs"
      ],
      "source_page": "src/content/docs/hosts/sn1-1f0ccb.md",
      "page": "/hosts/sn1-1f0ccb/"
    },
    {
      "id": "sn1_1f0ccb.receiver",
      "title": "Webhook receiver",
      "kind": "service",
      "inventory_id": "service-webhook-receiver",
      "status": "observed",
      "evidence": [
        "test-bed-discovery",
        "test-bed-runs"
      ],
      "source_page": "src/content/docs/hosts/sn1-1f0ccb.md",
      "page": "/hosts/sn1-1f0ccb/"
    },
    {
      "id": "sn7d_jetnpd.ingest",
      "title": "ingest",
      "kind": "service",
      "inventory_id": "service-nvr-ingest",
      "status": "observed",
      "evidence": [
        "test-bed-discovery",
        "test-bed-runs"
      ],
      "source_page": "src/content/docs/hosts/sn7d-jetnpd.md",
      "page": "/hosts/sn7d-jetnpd/"
    }
  ],
  "edges": [
    {
      "source": "sn1_1f0ccb.simulator",
      "target": "sn7d_jetnpd.ingest",
      "label": "RTSP 554, seven paths",
      "relationships": [
        {
          "source": "sn1_1f0ccb.simulator",
          "target": "sn7d_jetnpd.ingest",
          "kind": "serves",
          "label": "RTSP 554, seven paths"
        }
      ]
    },
    {
      "source": "sn7d_jetnpd.search_engine",
      "target": "sn1_1f0ccb.receiver",
      "label": "HTTP 8090 webhook actions",
      "relationships": [
        {
          "source": "sn7d_jetnpd.search_engine",
          "target": "sn1_1f0ccb.receiver",
          "kind": "connects",
          "label": "HTTP 8090 webhook actions"
        }
      ]
    },
    {
      "source": "sn7d_jetnpd.search_engine",
      "target": "sn7d_jetnpd.timescaledb",
      "label": "Detection rows and fire log",
      "relationships": [
        {
          "source": "sn7d_jetnpd.search_engine",
          "target": "sn7d_jetnpd.timescaledb",
          "kind": "writes",
          "label": "Detection rows and fire log"
        }
      ]
    }
  ]
}
