Plan · 2026-05-16 · solcom-review
solcom-review — dritte Achse „Figma-Parity"
Skill solcom-review erhält neben den bestehenden Achsen Standards und Spec
eine dritte parallele Sub-Agent-Achse Figma-Parity. Trigger: Diff matched
web/themes/custom/byte_theme/components/** oder web/themes/custom/byte_theme/src/**.
Anker: docs/design/MAPPING.html liefert Figma-Frame-Key pro betroffenem SDC.
Auslöser für den Plan: PR-Review P2503-84 (Header / Main-Nav / Footer) deckte auf, dass es heute keine
automatische Figma-Compliance-Prüfung im PR-Review-Loop gibt — ein FE-PR durchläuft Standards + Spec, aber
visuelle Drift gegenüber dem Design-System wird nur manuell entdeckt.
Skill-Touch
solcom-review + Report-Template
Reuse
solcom-figma-reviewer
00
Kontext
Lücke im heutigen Review-Loop und vorhandene Bausteine.
Status quo (ADR-0028): solcom-review spawnt zwei parallele Sub-Agents
(Standards, Spec) und liest die Prompts der vier file-glob-Diff-Time-Reviewer (solcom-brand-reviewer,
drupal-twig-sdc-reviewer, drupal-php-reviewer, drupal-config-architecture-reviewer)
nur als Rule-Korpora. solcom-figma-reviewer existiert ebenfalls, wird aber weder auto-getriggert noch
von solcom-review gespawnt.
Beobachtbare Lücke (PR P2503-84): Header-/Navbar-/Footer-Diff (~2000 LoC, 38 Files)
durchlief Review ohne jeden visuellen Soll-Ist-Abgleich gegen die Figma-Frames
byte_theme/navbar → 61148:47024 (Darkmode-Nav, P2503-122) und
byte_theme/footer → componentKey:9167b5c4 aus MAPPING.html.
Findings „Arrow als Inline-SVG statt ::before" und „Navbar-Container-Refactor weg von
1280 px" entstanden im Spec-Sub-Agent zufällig — eine Figma-Achse hätte sie als pixel-/spacing-Drift
deterministisch aufgegriffen.
Bestehende Bausteine:
docs/design/MAPPING.html — pflegt SDC ↔ Figma-Frame-Mapping mit Status (matched/partial/wip/gap/ready-for-dev/obsolete).
solcom-figma-reviewer — Read-only-Agent mit Figma-MCP-Tools, vergleicht Frame ↔ Implementation auf Layout, Spacing, Farben, Typo, Variants.
solcom-design-mapping-Skill — definiert das MAPPING-Format und die Status-Vokabular.
- ADR-0020 —
NEEDS_REAUTH-Pattern für Figma-MCP-Auth-Fail (≤2 Retries, dann strukturiertes JSON-Signal, kein Loop). Wiederverwenden.
- Memory
feedback_visual_verify_side_by_side — Side-by-Side gegen Screenshot statt CSS-Computed-Style messen.
Out of Scope: Visual-Auto-Regression (Pixel-Diff-CI-Stage à la BackstopJS, Percy)
— separate Tooling-Frage. Hier nur: in den manuellen /solcom-review-Run die Figma-Sicht
zusätzlich einklinken.
01
Vertical Slices
Drei tracer-bullet Slices. Jede für sich grabbar, Tests/Smoke nach jeder Slice.
S1
Frame-Lookup-Mechanik (MAPPING-Parser inline im Skill)
Touch: SKILL.md-Schritt 3.5 (neu) · AFK
Der Skill bekommt einen neuen Pre-Step zwischen 3 (Standards-Korpora) und 4 (Sub-Agent-Spawn):
liest docs/design/MAPPING.html, extrahiert pro <article class="card">
das Tupel { sdc-name, frame-key, status, verified-date } aus den
<code class="node">- und <div class="sdc">-Knoten.
Filtert auf SDCs, die im Diff geändert wurden (git diff --name-only origin/develop...HEAD | grep components/).
Skip-Pfad: keine Treffer → keine Figma-Achse (kein Spawn, Hinweis im Output).
Beispiel-Output für P2503-84-Diff:
[
{ "sdc": "byte_theme/navbar", "frame": "61148:47024", "status": "ready-for-dev", "verified": "2026-05-13" },
{ "sdc": "byte_theme/footer", "frame": "9167b5c4", "status": "wip", "verified": "2026-05-04" }
]
Akzeptanzkriterien
- Parser handhabt
node-id sowohl im Figma-URL-Format (61148:47024) als auch componentKey-Format.
- Filter respektiert nur SDC-Files (
*.twig, *.tailwind.css, *.component.yml) — nicht .theme-Hook-Edits.
- Bei Status
gap oder obsolete: SDC im Diff, aber kein lebendes Mapping — explizit als „no-anchor-skip" markieren (nicht als Fehler).
- Bei mehreren Frames pro SDC (matched + ready-for-dev): den jeweils
ready-for-dev/matched-Eintrag bevorzugen, der verified-Date höher rankt.
- Falls
MAPPING.html fehlt oder leer ist: gracefully skippen, keine Exception.
S2
Skill-Erweiterung: dritter parallel-spawned Sub-Agent
Touch: SKILL.md-Schritte 4 und 5 · AFK
Wenn S1 ≥1 Tupel liefert, spawnt der Skill in der selben Nachricht (parallel zu Standards + Spec)
einen dritten Agent-Tool-Call mit subagent_type: "solcom-figma-reviewer"
(kein general-purpose — der Reviewer hat dedizierte Figma-MCP-Tools).
Input: das Tupel-Array aus S1, dazu der git-diff-Befehl, dazu Glob-Pfade zu den Twig-/CSS-Files
für direkten Read durch den Reviewer. Aggregations-Schritt 5 bekommt eine dritte Heading ## Figma
neben ## Standards und ## Spec.
Prompt-Skelett für den Figma-Sub-Agent:
Du bist solcom-figma-reviewer. Vergleiche pro SDC den Diff gegen den Figma-Frame.
Inputs:
- working-dir:
- sdc-frame-pairs:
byte_theme/navbar → 61148:47024
byte_theme/footer → 9167b5c4
- diff-cmd: git diff origin/develop...HEAD
Pro SDC:
1. Figma-Frame via mcp__claude_ai_Figma__get_design_context laden.
2. Twig + CSS + component.yml des SDC lesen.
3. Auf Spacing/Farben/Typo/Variants/Inhalt vergleichen.
4. Status setzen: matched | partial | drift.
5. Detail-Findings (Soll vs. Ist, Quelle: Figma-Variable-Name oder
Twig-File:Line).
Auth-Fail-Verhalten: ≤2 Retries; danach NEEDS_REAUTH-Note (ADR-0020),
kein Hard-Stop für den Gesamt-Run.
Akzeptanzkriterien
- Drei Agent-Spawns in einer einzigen Nachricht (parallel-Pattern).
- Wenn S1 leer → kein dritter Spawn, Aggregations-Heading
## Figma erscheint mit no SDC diff — Figma-Achse übersprungen.
- Sub-Agent-Prompt nennt den Pfad zum
byte_theme/AGENTS.md als Brand-Token-Referenz (damit Findings auf Tokens mappen statt Hex-Vergleich).
- Sub-Agent-Modell explizit
opus oder sonnet — Visual-Pattern-Matching ist nicht Haiku-tauglich (Memory feedback_visual_verify_side_by_side).
S3
Report-Template + Persistierung um Figma-Sektion erweitern
Touch: 03-code-review-pr.html + SKILL.md-Schritt 6 · AFK
Im persistierten Report (docs/reports/<YYYY-MM-DD>-<branch>-review.html) kommt
eine dritte Top-Level-Section <!-- FIGMA --> nach <!-- SPEC --> mit dem
gleichen axis-card-Layout (eine Card pro SDC, Status-Tag matched/partial/drift,
Findings-Liste). Risk-Map-Chips bekommen Status-Klasse chip.attention bei drift,
chip.medium bei partial, chip.safe bei matched.
Story-Hub-Write-Back-Format (Schritt 6.5) wird um eine zweite Datenzeile ergänzt:
standards: N hard / M judgement, spec: K, figma: matched=A, partial=B, drift=C.
Akzeptanzkriterien
- Template
03-code-review-pr.html behält Style-Pattern (axis-card, risk-tag, finding-label) bei.
- Frontmatter-Meta um
solcom:figma-frames erweitert (Liste der genutzten Frame-Keys, für späteren Lint).
- Bei MCP-Auth-Fail rendert die Figma-Section eine warning-card mit dem
NEEDS_REAUTH-Hinweis statt der Findings — Report bleibt vollständig.
- LOG.html-Eintrag „decide" sagt zusätzlich
figma: matched=A, partial=B, drift=C im Title.
- Smoke:
/solcom-review auf einer Branch ohne SDC-Diff (z. B. reiner Config-Change) rendert die Section trotzdem mit einer placeholder-card „no SDC diff" — keine harten Crashes.
02
Risiken
MAPPING.html-HTML-Struktur ändert sich (z. B. neue Wrapper-Divs) → Parser bricht still.
med
Defensive parsing: bei 0 Tupeln aus ≥1 SDC-File-Diff explizit warnen statt skippen. Optional späterer Helper-Skript mit Snapshot-Test.
Figma-MCP-Auth ist volatil — Token expired, MCP nicht in Whitelist, Browser-Tab geschlossen.
high
ADR-0020-Pattern: ≤2 Retries, dann NEEDS_REAUTH-Section im Report, Standards + Spec ungehindert. Kein Hard-Stop für den Gesamt-Run.
SDC im Diff hat keinen Eintrag in MAPPING.html → Reviewer hat keinen Anker.
low
Skip-with-Hint: „no-anchor — SDC nicht in MAPPING.html, Eintrag via solcom-design-scanner nachpflegen". Output ist Aufruf, nicht Fehler.
Figma-Frame ist veraltet (Status gap/obsolete) — Drift wäre erwartbar, Reviewer-Output verwirrt Author.
med
Status-Filter in S1: gap/obsolete werden mit Banner gerendert (Frame-Status: obsolete — Drift erwartbar), Reviewer wird trotzdem gespawnt für Sichtbarkeit.
Visual-Diff ist subjektiv — Reviewer-Output streut zwischen Runs.
med
Memory feedback_visual_verify_side_by_side als Pflicht-Lese im Sub-Agent-Prompt; Findings müssen Twig-Pfad + Figma-Variable zitieren, kein „looks different".
Token-Verbrauch: drei parallele Sub-Agents statt zwei → ~+50 % Kontext-Last pro Run.
low
Sonnet als Default, klar definierte Output-Caps (<400 Wörter wie bisher). Kein Loop, einmaliger Spawn.
03
Offene Items / Pre-Implementation-Gates
OQ1 · Frame-Selection bei mehreren Mappings
Manche SDCs (z. B. byte_theme/navbar) haben in MAPPING.html mehrere Frame-Einträge mit unterschiedlichem Status (partial/wip und ready-for-dev). Heuristik in S1 nimmt den jüngsten ready-for-dev/matched. Frage: brauchen wir einen Mechanismus, den Frame an die Story zu binden (Story-Hub trägt explizite Frame-IDs)? Vorschlag: ja, aber out-of-scope dieses Plans — eigener Plan / ADR, sobald die Heuristik die ersten Fehlauslesen produziert.
OQ2 · solcom-figma-reviewer Input-Schema
Heutige .claude/agents/solcom-figma-reviewer.md erwartet einen einzelnen Frame als Input. Mit dem Plan kommt ein Tupel-Array. Prüfen: ist die Agent-Spec heute schon Multi-Frame-fähig (interner Loop), oder müssen wir den Prompt anpassen? Falls Anpassung nötig: minimaler Diff in .claude/agents/solcom-figma-reviewer.md mit Multi-SDC-Pattern.
OQ3 · Cross-Skill-Wiederverwendung
Der gleiche MAPPING-Lookup wird perspektivisch auch in figma-autonomous-implementer und solcom-design-scanner gebraucht. Frage: jetzt schon als Helper-Skill oder Helper-Skript ausziehen, oder erst beim zweiten Use-Case extrahieren (YAGNI)? Vorschlag: zweiter Use-Case abwarten — Inline-Logik im SKILL.md ist heute lesbar und stabil.
OQ4 · Backfill bestehender Reports
Bereits persistierte Reports (P2503-103, P2503-105) haben keine Figma-Section. Frage: nachträglich anlegen oder nur ab heute? Vorschlag: nur ab heute — historische Reports bleiben unverändert (Audit-Trail-Hygiene).
OQ5 · Customer-Lens-Reviewer-Konsultation
Skill-Architektur-Erweiterung ohne ≥2 Topologie-Optionen — Tool-Erweiterung, keine Komponenten-Topologie. Customer-Lens-Reviewer-Pflicht: N/A (siehe ADR-0028, „Skill-Internals"-Klausel).