{
  "schemaVersion": 1,
  "title": "ImageHush metadata cleaner test results",
  "description": "Reproducible synthetic-fixture results for the image scanner and document cleaner shipped by ImageHush.",
  "published": "2026-08-24",
  "lastVerified": "2026-08-24",
  "status": "passed",
  "command": "npm run check",
  "sourceFiles": [
    "scripts/image-core.test.mjs",
    "scripts/document-tool.test.mjs"
  ],
  "summary": {
    "reportedScenarios": 10,
    "representedFormats": 9,
    "testSuites": 2
  },
  "groups": [
    {
      "name": "Image fixtures",
      "description": "Byte-level fixtures exercise the same scanner and binary cleanup functions served to the browser.",
      "scenarios": [
        {
          "id": "jpeg-metadata-cleanup",
          "format": "JPEG",
          "evidence": "Cleanup + rescan",
          "planted": "EXIF, extended XMP, IPTC and a JPEG comment, alongside an ICC color profile.",
          "verified": "The targeted metadata is absent after cleanup; the ICC profile, dimensions and compressed image stream remain.",
          "status": "passed"
        },
        {
          "id": "jpeg-gps-parsing",
          "format": "JPEG",
          "evidence": "Parse accuracy",
          "planted": "GPS latitude 37°46′30″ N and longitude 122°25′10″ W in an EXIF GPS directory.",
          "verified": "The scanner reports 37.775000, −122.419444 and flags GPS metadata.",
          "status": "passed"
        },
        {
          "id": "jpeg-orientation-safety",
          "format": "JPEG",
          "evidence": "Safety routing",
          "planted": "An EXIF orientation value of 6, which changes the displayed orientation.",
          "verified": "The file is not marked eligible for the byte-only lossless path, preventing removal of the orientation instruction without a visual export.",
          "status": "passed"
        },
        {
          "id": "gif-metadata-cleanup",
          "format": "GIF",
          "evidence": "Cleanup + rescan",
          "planted": "A GIF comment extension and an XMP application extension.",
          "verified": "Both metadata blocks are removed while the image data and GIF trailer remain.",
          "status": "passed"
        },
        {
          "id": "tiff-decoding",
          "format": "TIFF",
          "evidence": "Decode integrity",
          "planted": "A synthetic 2 × 2 RGBA image encoded as TIFF.",
          "verified": "The format is recognized and decoded with the expected width and height.",
          "status": "passed"
        },
        {
          "id": "heic-avif-identification",
          "format": "HEIC + AVIF",
          "evidence": "Format detection",
          "planted": "Minimal ISO Base Media File Format headers carrying HEIC and AVIF brands.",
          "verified": "Each signature is assigned to the correct input path. This scenario tests identification, not an end-to-end export.",
          "status": "passed"
        }
      ]
    },
    {
      "name": "Document fixtures",
      "description": "The built browser tool receives synthetic documents through its normal drop workflow, cleans them, and reopens the resulting bytes.",
      "scenarios": [
        {
          "id": "docx-metadata-cleanup",
          "format": "DOCX",
          "evidence": "Cleanup + reopen",
          "planted": "Core, application and custom properties; creator names; revision attribution; and a thumbnail relationship.",
          "verified": "Targeted properties, names and thumbnail references are absent; visible document text remains.",
          "status": "passed"
        },
        {
          "id": "xlsx-metadata-cleanup",
          "format": "XLSX",
          "evidence": "Cleanup + reopen",
          "planted": "Core and application properties plus spreadsheet comment-author attribution.",
          "verified": "The planted title, creator, application value and comment-author name are absent after cleanup.",
          "status": "passed"
        },
        {
          "id": "pptx-metadata-cleanup",
          "format": "PPTX",
          "evidence": "Cleanup + reopen",
          "planted": "Core and application properties plus presentation comment-author attribution.",
          "verified": "The planted title, creator, application value and comment-author name are absent after cleanup.",
          "status": "passed"
        },
        {
          "id": "pdf-metadata-cleanup",
          "format": "PDF",
          "evidence": "Cleanup + reopen",
          "planted": "Title, author, subject, keywords, creator, producer, dates and a catalog XMP metadata stream.",
          "verified": "Document-information values and XMP are absent; the cleaned document still has exactly one page.",
          "status": "passed"
        }
      ]
    }
  ],
  "limitations": [
    "Synthetic fixtures prove the documented assertions, not compatibility with every file producer or malformed variant.",
    "HEIC and AVIF identification is tested separately from browser decoding and export.",
    "The report does not test visible redaction, malware detection, pixel watermarks, authenticity or third-party records.",
    "Signed, encrypted and macro-enabled documents are outside the cleaner path and may be blocked rather than rewritten."
  ]
}
