# Figma vs SoT Drift Report

> Generated: 2026-06-03T09:25:08.893Z
> Source: figma-data/normalized/components.manifest.json (685 entries; 644 icon entries)
> Target: docs/internal/affordance-categories/ (644 entries)
> Drift summary: A=0 B=0 C=0 D=0 F=0 G=0
> (A/B/C blocking; D/E/F/G warning)

## Type A — figma-only (figma 有但 SoT 缺)

| figma_component_key | figma_name | figma_node_id | proposed action |
|---|---|---|---|
| — | — | — | — |

## Type B — sot-orphan (SoT 有但 figma 缺)

| registry_name | figma_component_key | last figma_name | proposed action |
|---|---|---|---|
| — | — | — | — |

## Type C — figma-name-drift

| component_key | SoT figma_name | figma library figma_name | proposed action |
|---|---|---|---|
| — | — | — | — |

## Type D — node-id-drift (warning)

| component_key | registry_name | SoT nodeId | figma library nodeId | proposed action |
|---|---|---|---|---|
| — | — | — | — | — |

## Type E — svg-content-drift (warning)

Not implemented in Phase D v1. Current summary value is always `0`.

## Type F — figma-null-key (warning, INFRA-F38)

Figma icon entries whose `components-tokenized` `key` is null/missing. Previously
these were silently filtered out of the comparison (the 2026-05-29 component_key=null
class of silent miss). Now surfaced so the extract/normalize pipeline gets inspected.

| figma_name | figma_node_id | name → SoT registry | proposed action |
|---|---|---|---|
| — | — | — | — |

## Type G — key-mismatch (warning, INFRA-F38)

Figma icon whose `figma_name` matches a SoT entry but whose `component_key` differs
(name-join fallback). Means the SoT `component_key` drifted — NOT a missing icon, so
it is no longer mis-reported as Type A figma-only.

| figma_name | SoT registry | figma library key | SoT key | proposed action |
|---|---|---|---|---|
| — | — | — | — | — |

## Resolution workflow

1. plan owner read drift report
2. 按 type A/B/C action 列拍板：
   - A: write new draft entry → Phase B-v2 batch promote (single-batch mode) → Phase C merge
   - B: confirm with designer → either delete SoT entry OR update component_key
   - C: in-place patch SoT `figma_name` field
3. Re-run `pnpm audit:figma-vs-sot` until A/B/C are 0.
