{
  "experiment": "Chime v0.1 software-only acoustic discovery handshake",
  "generatedAt": "2026-09-16T00:49:59.473Z",
  "library": {
    "name": "ggwave",
    "version": "0.4.0",
    "protocol": "GGWAVE_PROTOCOL_AUDIBLE_FAST",
    "protocolId": 1,
    "volume": 20,
    "dss": false,
    "binaryPayload": true,
    "source": "https://github.com/ggerganov/ggwave"
  },
  "packet": {
    "bytes": 20,
    "byteOrder": "big-endian",
    "crc": "CRC16-CCITT-FALSE",
    "helloHex": "434801013A71C94B2056D8E2010203040007DDAC",
    "ackHex": "434801023A71C94B2056D8E20506070800070EBE",
    "hello": {
      "type": 1,
      "sessionTag": "3A71C94B2056D8E2",
      "senderTag": "01020304",
      "capabilities": 7
    },
    "ack": {
      "type": 2,
      "sessionTag": "3A71C94B2056D8E2",
      "senderTag": "05060708",
      "capabilities": 7
    }
  },
  "audio": {
    "file": "chime-demo.wav",
    "sampleRate": 48000,
    "channels": 1,
    "bitsPerSample": 16,
    "encoding": "PCM signed little-endian",
    "samples": 263104,
    "durationSeconds": 5.481333333333334,
    "helloDurationSeconds": 2.0906666666666665,
    "ackDurationSeconds": 2.0906666666666665,
    "interPacketSilenceSeconds": 0.7,
    "leadingSilenceSeconds": 0.2,
    "trailingSilenceSeconds": 0.4,
    "bytes": 526252,
    "sha256": "3e1909f930c0562793c95eba8ce509089e853edf14d30f9e6f4ef4b5d1f3527f"
  },
  "tests": {
    "runner": "node:test",
    "passed": 17,
    "failed": 0,
    "checks": [
      "CRC16-CCITT-FALSE standard vector 123456789 equals 0x29B1",
      "HELLO and ACK are exactly 20 bytes and decode without loss",
      "Packet respects big-endian capability and CRC fields",
      "Decoder accepts a packet view with a nonzero byte offset",
      "Every one-bit packet corruption is rejected",
      "Wrong lengths and non-byte input are rejected",
      "Unknown version and packet types are rejected even with valid CRC",
      "Encoder rejects malformed tags, capabilities and types",
      "ACK echoes pending HELLO session and wrong session is rejected",
      "HELLO cannot be accepted as ACK and reversed order is rejected",
      "Random live tags use secure random API and correct lengths",
      "ggwave Uint8Array accepts zero and non-ASCII bytes without an ASCII envelope",
      "Audible HELLO and ACK decode exactly from generated 48 kHz PCM",
      "Two messages separated by 0.7 seconds decode from one streamed recording",
      "Variable audio callback chunks decode after buffering into 1024-sample codec frames",
      "Both packets decode with deterministic uniform noise at nominal 24 dB SNR",
      "Published 16-bit mono WAV is below 2 MB and decodes to exact HELLO and ACK"
    ],
    "noise": {
      "kind": "deterministic uniform additive noise",
      "nominalSnrDb": 24,
      "reference": "RMS of concatenated generated packet waveforms",
      "signalRms": 0.046060350802812,
      "noiseRms": 0.00290621166283684,
      "seedHex": "4348494D"
    }
  },
  "limitations": [
    "Generated PCM and serialized WAV decoded in software; no speaker-to-microphone or room test performed.",
    "No microphone access, network pairing, endpoint connection, device control, latency synchronization, or authentication implemented.",
    "CRC detects corruption and echoed session tag correlates replies; neither proves identity or physical proximity.",
    "Public demonstration tags are deterministic fixtures and must not be reused for live sessions.",
    "Optional ggwave DSS disabled: an exploratory binary fixture with null bytes did not round-trip when DSS was enabled.",
    "Direct 777-sample decoding failed in an exploratory test. Buffering callback input to 1024-sample codec frames passes; a live receiver needs such buffering."
  ]
}
