{
  "name": "Free QR Codes degradation benchmark method",
  "version": "1.0",
  "status": "method-published-results-pending",
  "principle": "Record each condition separately; never collapse results into a universal scannability score.",
  "payload_families": ["short-url", "long-url", "plain-text", "wifi", "vcard"],
  "error_correction_levels": ["L", "M", "Q", "H"],
  "degradation_dimensions": {
    "blur_radius_px": [0, 0.5, 1, 1.5, 2, 3],
    "jpeg_quality": [100, 90, 75, 60, 40, 25],
    "quiet_zone_modules": [4, 3, 2, 1, 0],
    "effective_pixels_per_module": [12, 8, 6, 4, 3, 2, 1],
    "foreground_background_contrast": ["reference", "moderate", "low"],
    "logo_occlusion": ["none", "small-centre", "medium-centre"],
    "skew_degrees": [0, 2, 5, 10, 15],
    "print_scale_percent": [100, 95, 90, 80, 70]
  },
  "result_fields": [
    "case_id",
    "payload_family",
    "qr_version",
    "error_correction",
    "degradation_type",
    "degradation_value",
    "decoder",
    "device_or_browser",
    "decode_success",
    "exact_payload_match",
    "notes"
  ],
  "publication_rules": [
    "Do not publish a pass unless the decoded payload exactly matches the source payload.",
    "Keep browser-decoder, phone-camera and physical-print results separate.",
    "Record decoder/device versions and test date.",
    "Do not infer universal damage tolerance from QR error-correction percentages.",
    "Do not claim an image is safe, certified or guaranteed to scan from a single decoder result."
  ]
}
