{
  "fixture_name": "marmot.transport.nostr.routing.v1/state-valid-two-relays/v1",
  "fixture_version": "1",
  "vector_type": "app_component_state",
  "component": {
    "id": "0x8004",
    "name": "marmot.transport.nostr.routing.v1",
    "document": "spec/app-components/nostr-routing-v1.md"
  },
  "encoding": {
    "format": "Marmot canonical encoding",
    "notes": [
      "bytes.hex is the component state bytes stored in AppDataDictionary.component_data.data, in the Marmot canonical encoding (spec/foundation/canonical-encoding.md): QUIC variable-length length prefixes.",
      "opaque nostr_group_id[32] is exactly 32 bytes with NO length prefix.",
      "relays<V> is a QUIC-varint byte length, then each MarmotNostrRelayV1.url<1..512> is a QUIC-varint length prefix followed by the URL bytes.",
      "bytes.component_data_hex is the OpenMLS ComponentData entry: component_id (uint16 0x8004) then the data as a variable-length byte vector wrapping bytes.hex."
    ]
  },
  "bytes": {
    "hex": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2c157773733a2f2f72656c61792d612e6578616d706c65157773733a2f2f72656c61792d622e6578616d706c65",
    "component_data_hex": "8004404d000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2c157773733a2f2f72656c61792d612e6578616d706c65157773733a2f2f72656c61792d622e6578616d706c65"
  },
  "expected": {
    "valid": true,
    "fields": {
      "nostr_group_id_hex": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
      "relays": [
        "wss://relay-a.example",
        "wss://relay-b.example"
      ]
    },
    "errors": []
  },
  "notes": [
    "Relay order is byte-lexicographic over the URL content bytes and duplicate-free.",
    "This fixture does not include an AppDataUpdate wrapper."
  ]
}
