{
  "schemaVersion": 1,
  "generatedAt": "2026-10-21T14:44:49.483653+00:00",
  "kind": "offline-decoder-observation",
  "inputOrigin": "Hesela synthetic byte fixtures; no drive or incident capture",
  "scope": "Decoder labels only; no st write path, media I/O or recovery tested",
  "environment": {
    "python": "3.12.3",
    "platform": "Linux-6.8.0-146-generic-x86_64-with-glibc2.39"
  },
  "decoder": {
    "path": "/usr/bin/sg_decode_sense",
    "version": "version: 1.21 20190602",
    "sha256": "02196c7ffdfd71cf1f395431037f72bc9260d5245c3e7f919c5669c29dc1ed1f"
  },
  "sourceSha256": "382031c9ca6efbf1fa2dd0260dd24a5e0b9b86ae1dfd2f926599c8c3db96ea38",
  "passed": true,
  "cases": [
    {
      "id": "fixed-current-invalid",
      "senseHex": "70 00 43 00 00 00 02 0a 00 00 00 00 0c 00 00 00 00 00",
      "expected": {
        "format": "Fixed",
        "timing": "current",
        "senseKey": "Medium Error",
        "informationValid": false,
        "informationRaw": 2,
        "informationUnit": null,
        "deviceWriteOutcome": "not measured"
      },
      "argv": [
        "/usr/bin/sg_decode_sense",
        "70",
        "00",
        "43",
        "00",
        "00",
        "00",
        "02",
        "0a",
        "00",
        "00",
        "00",
        "00",
        "0c",
        "00",
        "00",
        "00",
        "00",
        "00"
      ],
      "exitCode": 0,
      "stdout": "Fixed format, current; Sense key: Medium Error\nAdditional sense: Write error\n  Valid=0, Info fld=0x2 [2]  EOM\n\n",
      "stderr": "",
      "checks": {
        "decoderExitZero": true,
        "format": true,
        "timing": true,
        "senseKey": true,
        "eom": true,
        "informationPresent": true,
        "informationRaw": true,
        "informationValidity": true,
        "additionalSense": true
      }
    },
    {
      "id": "fixed-current-valid",
      "senseHex": "f0 00 43 00 00 00 02 0a 00 00 00 00 0c 00 00 00 00 00",
      "expected": {
        "format": "Fixed",
        "timing": "current",
        "senseKey": "Medium Error",
        "informationValid": true,
        "informationRaw": 2,
        "informationUnit": null,
        "deviceWriteOutcome": "not measured"
      },
      "argv": [
        "/usr/bin/sg_decode_sense",
        "f0",
        "00",
        "43",
        "00",
        "00",
        "00",
        "02",
        "0a",
        "00",
        "00",
        "00",
        "00",
        "0c",
        "00",
        "00",
        "00",
        "00",
        "00"
      ],
      "exitCode": 0,
      "stdout": "Fixed format, current; Sense key: Medium Error\nAdditional sense: Write error\n  Info fld=0x2 [2]  EOM\n\n",
      "stderr": "",
      "checks": {
        "decoderExitZero": true,
        "format": true,
        "timing": true,
        "senseKey": true,
        "eom": true,
        "informationPresent": true,
        "informationRaw": true,
        "informationValidity": true,
        "additionalSense": true
      }
    },
    {
      "id": "fixed-deferred-invalid",
      "senseHex": "71 00 43 00 00 00 02 0a 00 00 00 00 0c 00 00 00 00 00",
      "expected": {
        "format": "Fixed",
        "timing": "deferred",
        "senseKey": "Medium Error",
        "informationValid": false,
        "informationRaw": 2,
        "informationUnit": null,
        "deviceWriteOutcome": "not measured"
      },
      "argv": [
        "/usr/bin/sg_decode_sense",
        "71",
        "00",
        "43",
        "00",
        "00",
        "00",
        "02",
        "0a",
        "00",
        "00",
        "00",
        "00",
        "0c",
        "00",
        "00",
        "00",
        "00",
        "00"
      ],
      "exitCode": 0,
      "stdout": "Fixed format, <<<deferred>>>; Sense key: Medium Error\nAdditional sense: Write error\n  Valid=0, Info fld=0x2 [2]  EOM\n\n",
      "stderr": "",
      "checks": {
        "decoderExitZero": true,
        "format": true,
        "timing": true,
        "senseKey": true,
        "eom": true,
        "informationPresent": true,
        "informationRaw": true,
        "informationValidity": true,
        "additionalSense": true
      }
    },
    {
      "id": "fixed-deferred-valid",
      "senseHex": "f1 00 43 00 00 00 02 0a 00 00 00 00 0c 00 00 00 00 00",
      "expected": {
        "format": "Fixed",
        "timing": "deferred",
        "senseKey": "Medium Error",
        "informationValid": true,
        "informationRaw": 2,
        "informationUnit": null,
        "deviceWriteOutcome": "not measured"
      },
      "argv": [
        "/usr/bin/sg_decode_sense",
        "f1",
        "00",
        "43",
        "00",
        "00",
        "00",
        "02",
        "0a",
        "00",
        "00",
        "00",
        "00",
        "0c",
        "00",
        "00",
        "00",
        "00",
        "00"
      ],
      "exitCode": 0,
      "stdout": "Fixed format, <<<deferred>>>; Sense key: Medium Error\nAdditional sense: Write error\n  Info fld=0x2 [2]  EOM\n\n",
      "stderr": "",
      "checks": {
        "decoderExitZero": true,
        "format": true,
        "timing": true,
        "senseKey": true,
        "eom": true,
        "informationPresent": true,
        "informationRaw": true,
        "informationValidity": true,
        "additionalSense": true
      }
    },
    {
      "id": "descriptor-current-invalid",
      "senseHex": "72 03 0c 00 00 00 00 10 00 0a 00 00 00 00 00 00 00 00 00 02 04 02 00 40",
      "expected": {
        "format": "Descriptor",
        "timing": "current",
        "senseKey": "Medium Error",
        "informationValid": false,
        "informationRaw": 2,
        "informationUnit": null,
        "deviceWriteOutcome": "not measured"
      },
      "argv": [
        "/usr/bin/sg_decode_sense",
        "72",
        "03",
        "0c",
        "00",
        "00",
        "00",
        "00",
        "10",
        "00",
        "0a",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "02",
        "04",
        "02",
        "00",
        "40"
      ],
      "exitCode": 0,
      "stdout": "Descriptor format, current; Sense key: Medium Error\nAdditional sense: Write error\n  Descriptor type: Information: Valid=0 (-> vendor specific) 0x0000000000000002\n  Descriptor type: Stream commands: End Of Medium (EOM)\n\n",
      "stderr": "",
      "checks": {
        "decoderExitZero": true,
        "format": true,
        "timing": true,
        "senseKey": true,
        "eom": true,
        "informationPresent": true,
        "informationRaw": true,
        "informationValidity": true,
        "additionalSense": true
      }
    },
    {
      "id": "descriptor-current-valid",
      "senseHex": "72 03 0c 00 00 00 00 10 00 0a 80 00 00 00 00 00 00 00 00 02 04 02 00 40",
      "expected": {
        "format": "Descriptor",
        "timing": "current",
        "senseKey": "Medium Error",
        "informationValid": true,
        "informationRaw": 2,
        "informationUnit": null,
        "deviceWriteOutcome": "not measured"
      },
      "argv": [
        "/usr/bin/sg_decode_sense",
        "72",
        "03",
        "0c",
        "00",
        "00",
        "00",
        "00",
        "10",
        "00",
        "0a",
        "80",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "02",
        "04",
        "02",
        "00",
        "40"
      ],
      "exitCode": 0,
      "stdout": "Descriptor format, current; Sense key: Medium Error\nAdditional sense: Write error\n  Descriptor type: Information: 0x0000000000000002\n  Descriptor type: Stream commands: End Of Medium (EOM)\n\n",
      "stderr": "",
      "checks": {
        "decoderExitZero": true,
        "format": true,
        "timing": true,
        "senseKey": true,
        "eom": true,
        "informationPresent": true,
        "informationRaw": true,
        "informationValidity": true,
        "additionalSense": true
      }
    },
    {
      "id": "descriptor-deferred-invalid",
      "senseHex": "73 03 0c 00 00 00 00 10 00 0a 00 00 00 00 00 00 00 00 00 02 04 02 00 40",
      "expected": {
        "format": "Descriptor",
        "timing": "deferred",
        "senseKey": "Medium Error",
        "informationValid": false,
        "informationRaw": 2,
        "informationUnit": null,
        "deviceWriteOutcome": "not measured"
      },
      "argv": [
        "/usr/bin/sg_decode_sense",
        "73",
        "03",
        "0c",
        "00",
        "00",
        "00",
        "00",
        "10",
        "00",
        "0a",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "02",
        "04",
        "02",
        "00",
        "40"
      ],
      "exitCode": 0,
      "stdout": "Descriptor format, <<<deferred>>>; Sense key: Medium Error\nAdditional sense: Write error\n  Descriptor type: Information: Valid=0 (-> vendor specific) 0x0000000000000002\n  Descriptor type: Stream commands: End Of Medium (EOM)\n\n",
      "stderr": "",
      "checks": {
        "decoderExitZero": true,
        "format": true,
        "timing": true,
        "senseKey": true,
        "eom": true,
        "informationPresent": true,
        "informationRaw": true,
        "informationValidity": true,
        "additionalSense": true
      }
    },
    {
      "id": "descriptor-deferred-valid",
      "senseHex": "73 03 0c 00 00 00 00 10 00 0a 80 00 00 00 00 00 00 00 00 02 04 02 00 40",
      "expected": {
        "format": "Descriptor",
        "timing": "deferred",
        "senseKey": "Medium Error",
        "informationValid": true,
        "informationRaw": 2,
        "informationUnit": null,
        "deviceWriteOutcome": "not measured"
      },
      "argv": [
        "/usr/bin/sg_decode_sense",
        "73",
        "03",
        "0c",
        "00",
        "00",
        "00",
        "00",
        "10",
        "00",
        "0a",
        "80",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "00",
        "02",
        "04",
        "02",
        "00",
        "40"
      ],
      "exitCode": 0,
      "stdout": "Descriptor format, <<<deferred>>>; Sense key: Medium Error\nAdditional sense: Write error\n  Descriptor type: Information: 0x0000000000000002\n  Descriptor type: Stream commands: End Of Medium (EOM)\n\n",
      "stderr": "",
      "checks": {
        "decoderExitZero": true,
        "format": true,
        "timing": true,
        "senseKey": true,
        "eom": true,
        "informationPresent": true,
        "informationRaw": true,
        "informationValidity": true,
        "additionalSense": true
      }
    },
    {
      "id": "end-of-partition",
      "senseHex": "f0 00 40 00 00 00 00 0a 00 00 00 00 00 02 00 00 00 00",
      "expected": {
        "format": "Fixed",
        "timing": "current",
        "senseKey": "No Sense",
        "informationValid": true,
        "informationRaw": 0,
        "informationUnit": null,
        "deviceWriteOutcome": "not measured"
      },
      "argv": [
        "/usr/bin/sg_decode_sense",
        "f0",
        "00",
        "40",
        "00",
        "00",
        "00",
        "00",
        "0a",
        "00",
        "00",
        "00",
        "00",
        "00",
        "02",
        "00",
        "00",
        "00",
        "00"
      ],
      "exitCode": 0,
      "stdout": "Fixed format, current; Sense key: No Sense\nAdditional sense: End-of-partition/medium detected\n  Info fld=0x0 [0]  EOM\n\n",
      "stderr": "",
      "checks": {
        "decoderExitZero": true,
        "format": true,
        "timing": true,
        "senseKey": true,
        "eom": true,
        "informationPresent": true,
        "informationRaw": true,
        "informationValidity": true,
        "additionalSense": true
      }
    },
    {
      "id": "programmable-early-warning",
      "senseHex": "f0 00 40 00 00 00 00 0a 00 00 00 00 00 07 00 00 00 00",
      "expected": {
        "format": "Fixed",
        "timing": "current",
        "senseKey": "No Sense",
        "informationValid": true,
        "informationRaw": 0,
        "informationUnit": null,
        "deviceWriteOutcome": "not measured"
      },
      "argv": [
        "/usr/bin/sg_decode_sense",
        "f0",
        "00",
        "40",
        "00",
        "00",
        "00",
        "00",
        "0a",
        "00",
        "00",
        "00",
        "00",
        "00",
        "07",
        "00",
        "00",
        "00",
        "00"
      ],
      "exitCode": 0,
      "stdout": "Fixed format, current; Sense key: No Sense\nAdditional sense: Programmable early warning detected\n  Info fld=0x0 [0]  EOM\n\n",
      "stderr": "",
      "checks": {
        "decoderExitZero": true,
        "format": true,
        "timing": true,
        "senseKey": true,
        "eom": true,
        "informationPresent": true,
        "informationRaw": true,
        "informationValidity": true,
        "additionalSense": true
      }
    }
  ]
}
