{
  "_doc": "INFRA-F68 / FID-04 deep-node fidelity — semantic-role model (M1). Maps a code component's Figma child nodes to STABLE semantic roles so ONE `data-figma-role` annotation in the .vue covers that leaf across ALL Figma variants (Figma assigns a distinct nodeId per variant, so static `data-figma-node-id` only ever matched 1 variant → coverage capped at 0.83%). The manifest generator (scripts/generate-render-verification-manifest.mjs) tags each expectedNode with `role` when a matcher hits; the render-verification comparator (tests/visual-verify/lib/drift-compare-core.ts) then locates DOM leaves by `[data-figma-role]` instead of exact nodeId. Match keys: `type` (Figma node type e.g. TEXT/INSTANCE) and `nameEquals` (exact Figma layer name). AMBIGUITY GUARD: if a matcher hits >1 node within a single variant, NO role is assigned (fails safe to coverage-gap — never a false mismatch).",
  "_scope": "Pilot (owner-approved 2026-07-20): Badge + SelectBox. Roll out to remaining components after review.",
  "roleMap": {
    "Badge": [
      { "role": "badge-label", "match": { "type": "TEXT" } }
    ],
    "SelectBoxFilled": [
      { "role": "select-value-text", "match": { "type": "TEXT" }, "excludeStates": ["editable"], "_note": "editable excluded: extractor merges the input caret color (#595959 grey-8) into the placeholder TEXT node fill; true placeholder text is #7b7b7b grey-7 (code renders correctly, designer-confirmed 2026-07-20). Re-include once the extractor drops caret nodes." },
      { "role": "select-dropdown-arrow", "match": { "nameEquals": "icon/Arrow/Dropdown" } }
    ],
    "SelectBoxLine": [
      { "role": "select-value-text", "match": { "type": "TEXT" }, "excludeStates": ["editable"], "_note": "editable excluded: extractor merges the input caret color (#595959 grey-8) into the placeholder TEXT node fill; true placeholder text is #7b7b7b grey-7 (code renders correctly, designer-confirmed 2026-07-20). Re-include once the extractor drops caret nodes." },
      { "role": "select-dropdown-arrow", "match": { "nameEquals": "icon/Arrow/Dropdown" } }
    ]
  }
}
