{
  "schemaVersion": 1,
  "brand": "kornwolf",
  "command": "freak audit .",
  "rules": [
    {
      "id": "responsive/fixed-font-px",
      "severity": "warning",
      "title": "Fixed pixel font size",
      "rationale": "Typography must remain useful across zoom, text scaling, embedded containers, and unusually large displays."
    },
    {
      "id": "responsive/tiny-type",
      "severity": "error",
      "title": "Microscopic interface type",
      "rationale": "Ordinary interface labels must not collapse into 7–11 CSS pixel annotation text."
    },
    {
      "id": "responsive/hard-fluid-ceiling",
      "severity": "review",
      "title": "Hard ceiling on a fluid scale",
      "rationale": "A clamp or min/max expression can still freeze at laptop scale on 5K, ultrawide, wall, or embedded displays."
    },
    {
      "id": "responsive/fixed-geometry-px",
      "severity": "review",
      "title": "Fixed pixel geometry",
      "rationale": "Fixed component geometry is presumptively wrong unless the physical or raster meaning is explicit."
    },
    {
      "id": "responsive/fixed-structural-size",
      "severity": "review",
      "title": "Fixed structural size",
      "rationale": "Relative units can still freeze grids, rails, canvases, or panels at one assumed physical scale when used as hard structure."
    },
    {
      "id": "responsive/fixed-container-ceiling",
      "severity": "review",
      "title": "Hard component or application width ceiling",
      "rationale": "Large displays should gain readable scale, context, visualization area, or intentional whitespace instead of freezing at laptop geometry."
    },
    {
      "id": "responsive/global-overflow-hidden",
      "severity": "warning",
      "title": "Global overflow suppression",
      "rationale": "Hiding overflow on the page or application shell can conceal inaccessible content when text, controls, or containers reflow."
    },
    {
      "id": "responsive/viewport-breakpoint",
      "severity": "review",
      "title": "Viewport size breakpoint",
      "rationale": "Reusable composition should normally respond to available container space and capabilities rather than device-shaped viewport assumptions."
    },
    {
      "id": "responsive/fixed-aspect-ratio",
      "severity": "review",
      "title": "Fixed aspect-ratio assumption",
      "rationale": "Screen and host aspect ratios are not stable product capabilities."
    },
    {
      "id": "responsive/viewport-locked-shell",
      "severity": "warning",
      "title": "Viewport-locked geometry",
      "rationale": "100vw/100vh shells can encode browser-chrome and embedding assumptions and should be justified."
    },
    {
      "id": "responsive/zoom-disabled",
      "severity": "error",
      "title": "User zoom disabled",
      "rationale": "Pinch zoom and browser zoom are accessibility and resilience features, not optional decoration."
    },
    {
      "id": "responsive/touch-action-none",
      "severity": "warning",
      "title": "Native touch behavior disabled",
      "rationale": "touch-action:none belongs only on bounded direct-manipulation regions with equivalent controls."
    },
    {
      "id": "mcp/raw-json-ui",
      "severity": "warning",
      "title": "Raw JSON presented as UI",
      "rationale": "An MCP App must add interaction or comprehension beyond the inspectable tool result."
    },
    {
      "id": "mcp/generic-table-ui",
      "severity": "review",
      "title": "Generic MCP table surface",
      "rationale": "Tables should exist because comparison, sorting, filtering, selection, or drill-down is the task, not because arrays are easy to render."
    },
    {
      "id": "mcp/schema-shaped-fields",
      "severity": "review",
      "title": "Schema-shaped field UI",
      "rationale": "Object keys and generic field registries are data contracts, not information architecture; user-facing UI should be organized around the task."
    },
    {
      "id": "copy/prestige-filler",
      "severity": "review",
      "title": "Assistant prestige filler",
      "rationale": "Human-facing copy should use concrete domain language instead of model-favored abstraction or throat-clearing vocabulary."
    },
    {
      "id": "copy/repeated-opening",
      "severity": "review",
      "title": "Repeated sentence opening",
      "rationale": "Repeated sentence openings are a corpus-level signal of generated cadence and should trigger cold-reader review."
    },
    {
      "id": "copy/contrast-density",
      "severity": "review",
      "title": "Correction-shaped contrast density",
      "rationale": "Dense contrastive correction can preserve conversation residue after the rejected framing has disappeared."
    },
    {
      "id": "copy/rejected-alternative-scaffolding",
      "severity": "review",
      "title": "Rejected-alternative scaffolding",
      "rationale": "Short public copy should name the chosen object or behavior directly instead of explaining discarded alternatives or invisible objections."
    }
  ],
  "runtimeAcceptance": {
    "reflowFloorCssPx": 320,
    "displayClasses": [
      "narrow",
      "ordinary",
      "split",
      "large",
      "5k-ultrawide",
      "8k-ultrawide"
    ],
    "orientations": [
      "portrait",
      "landscape",
      "short-wide",
      "tall-narrow"
    ],
    "inputCapabilities": [
      "keyboard",
      "coarse-pointer",
      "fine-pointer",
      "hover",
      "no-hover"
    ],
    "preferences": [
      "200%-text",
      "400%-zoom-reflow",
      "reduced-motion",
      "forced-colors",
      "increased-contrast"
    ],
    "assertions": [
      "no-horizontal-page-overflow",
      "no-unreachable-controls",
      "no-clipped-focus",
      "readable-interface-scale",
      "large-displays-gain-scale-or-context",
      "essential-actions-have-non-gesture-paths",
      "navigation-remains-reachable"
    ]
  },
  "modelBackedReview": {
    "mode": "supplemental",
    "versionedPrompt": true,
    "versionedFixtures": true,
    "schemaValidatedOutput": true,
    "recordModelIdentity": true,
    "recordRenderedEvidence": true,
    "independentReviewer": true
  }
}
