MAPPING.html: Figma-Status als zweite Dimension
docs/design/MAPPING.html bekommt zwei neue orthogonale Spalten: Figma-Status (ready-for-dev / wip / archived / -) und Jira Sub-Task (P2503-<n> oder leer). Die bestehende Status-Spalte (Implementierungs-Parity) bleibt unverändert. Tupel-Status-Werte wie gap-ready-for-dev werden verworfen.
Kontext
Das laufende Feature figma-ready-for-dev-to-jira (Plan
2026-05-11-002) braucht eine Möglichkeit, in
docs/design/MAPPING.html festzuhalten:
- Figma-Readiness: Hat der Designer den Frame in Figma auf „Ready for Dev" gesetzt? (Figma-seitige Information, unabhängig vom Implementierungsfortschritt im Code.)
- Jira-Verknüpfung: Existiert bereits ein Jira-Sub-Task unter P2503-83 für diesen Frame? (Dient als Idempotenz-Anker — verhindert Duplicate-Sub-Tasks beim wiederholten Skill-Run.)
Beide Informationen sind orthogonal zur bestehenden Status-Spalte
(matched / partial / gap / obsolete), die den Implementierungs-Parity-Stand abbildet.
Ein Frame kann gleichzeitig gap sein (noch kein SDC) und
ready-for-dev (der Designer hat ihn freigegeben) — das ist ein zulässiger,
informativer Zustand, kein Widerspruch.
Bislang hat die MAPPING-Tabelle sechs Spalten:
Figma-Frame / Figma-Node-ID / SDC / Komposition /
Status / Last verified / Notes.
Die Erweiterungsentscheidung ist nicht aus dem Code allein erschließbar und betrifft das
Schema der zentralen Source-of-Truth für Design-Parity im Projekt. Ein ADR ist daher
angemessen (Kriterium: hard-to-reverse + surprising-without-context + real-trade-off).
customer-lens-reviewer-Agent konsultiert. Das Konsultations-Log steht im nächsten Abschnitt.
Reviewer-Konsultation
Konsultation des customer-lens-reviewer-Agents (2026-05-11) gemäß
solcom-adr-workflow-Pflicht (≥ 2 Optionen). Entscheidungsfrage:
Option A (Tupel-Werte in einer Spalte) vs. Option B (zwei orthogonale Spalten).
Die Review wurde in zwei Etappen geführt: zuerst Lens-style Self-Review durch den
S1-Implementations-Subagenten, danach validierende Konsultation des echten
customer-lens-reviewer-Agents durch den Orchestrator. Beide Reviews
empfehlen einstimmig Option B; die echte Konsultation hat zusätzlich den
Edge-Case obsolete-Frame mit existierender Jira-Key als Kipp-Argument
gegen Option A herausgearbeitet (siehe „Rejected alternatives").
Optionen
- Option A: Eine erweiterte Status-Spalte mit Tupel-Werten (
gap-ready-for-dev,matched-wip,partial-archivedusw.). Implementierungs-Status und Figma-Readiness werden in einem einzigen Wert codiert. - Option B: Zwei neue orthogonale Spalten: bestehende
Status-Spalte bleibt unverändert, neue SpalteFigma-Status(ready-for-dev / wip / archived / -) plus neue SpalteJira Sub-Task(P2503-Key oder leer).
Review-Matrix
| Lens | Option A | Option B |
|---|---|---|
| Designer:innen (Figma-Mapping) | ⚠️ Tupel-Werte erzeugen eine implizite Kreuzprodukt-Semantik, die in Figma kein Äquivalent hat. Der „ready-for-dev"-Zustand ist eine eigenständige Figma-Dimension (Dev Mode Marker), orthogonal zu Implementierungsgrad. Mischung in einem Wert verunklärt, welche Achse gerade kommuniziert wird. | ✅ Klare 1:1-Entsprechung: Figma-Status spiegelt direkt den Figma-Dev-Mode-Marker. Designer können ihren Workflow-Status separat lesen, ohne ihn mit dem Implementierungsgrad zu verknüpfen. |
| Site-Builder:innen (SDC-UX) | ❌ Tupel-Vokabular (gap-ready-for-dev, partial-archived) ist für Nicht-Entwickler nicht selbsterklärend. Die Tabelle würde zu einem Mapping von Mappings — mentaler Overhead steigt stark an. |
✅ Jede Spalte hat genau eine Bedeutungsachse. Status beantwortet „Ist es gebaut?", Figma-Status beantwortet „Hat der Designer es freigegeben?", Jira Sub-Task beantwortet „Gibt es ein Ticket?". Drei einfache Fragen, drei Spalten. |
| Theme-Entwickler:innen (Code-Health) | ⚠️ Das Status-Vokabular ist in der Skill-Doku (solcom-design-mapping/SKILL.md) als genau vier Werte festgelegt; Erweiterung auf Tupel würde die Regel „Erweiterung nur per ADR" formal einhalten, aber das Enum auf 4×4 = 16 mögliche Kombinationen aufblähen, von denen viele semantisch unsinnig sind (obsolete-ready-for-dev). Scanner- und Skill-Code müsste Tupel parsen statt zwei unabhängige Felder lesen. |
✅ Scanner und Skill lesen zwei voneinander unabhängige Felder. Jede Spalte ist unabhängig nullable/leer. Kein Parsing-Overhead, keine unsinnigen Kombinationen. Migrations-Aufwand ist einmalig (leere <td>s einfügen), kein Rewrite bestehender Werte. |
Rote Flaggen pro Option
Option A:
- Variant-Wildwuchs: 4 Impl.-Status × 4 Figma-Status = 16 Tupel-Kombinationen. Mindestens 4 davon sind semantisch unsinnig (
matched-archivedimpliziert, dass ein vollständig implementiertes SDC einen archivierten Figma-Frame referenziert — ein Zustand, der in der Praxis alsobsoletegeführt werden sollte, nicht als Tupel). Das Status-Vokabular verliert seine Eindeutigkeit. - Conditional-Props-Analogon: Im Tupel-Modell hängen die gültigen Werte der „zweiten Hälfte" implizit vom Status der „ersten Hälfte" ab — ein Constraint, den kein HTML-Schema enforcen kann.
- Scanner-Komplexität: Der
solcom-design-scanner-Agent müsste bei jedem Update sowohl Impl.-Status als auch Figma-Status lesen und neu kombinieren, statt die Felder unabhängig schreiben zu können.
Option B:
- Tabellenbreite wächst um zwei Spalten. Bei >40 Rows kann das auf kleinen Viewports horizontales Scrollen erzwingen — kein funktionaler, aber ein visueller Nachteil.
Empfehlung: Option B — Zwei orthogonale Spalten, bestehende Status-Spalte unverändert.
Alle drei Linsen bewerten Option B besser. Der einzige Nachteil (Tabellenbreite) ist visuell, nicht funktional. Option A würde ein Status-Vokabular schaffen, das 16 Kombinationen hat, von denen viele semantisch leer sind — ein klares Zeichen für falsche Abstraktion.
Gegenargument zur Empfehlung
Das stärkste Argument für Option A: Wer nur die MAPPING-Tabelle liest (ohne Skill-Kontext), sieht bei Option B drei separate Spalten, ohne den kausalen Zusammenhang „gap + ready-for-dev → Jira-Sub-Task anlegen" sofort zu erkennen. Option A würde diesen Zusammenhang in der Spalte selbst codieren und so die Tabelle als Kommunikationsmittel dichter machen. Dieses Argument trägt jedoch nur, wenn die Tabelle primär von Menschen ohne Skill-Kontext gelesen wird — im vorliegenden Workflow ist der Hauptkonsument der Skill selbst, nicht der menschliche Leser.
Was nicht geprüft wurde
- Performance-Impact breiterer Tabelle im Browser (vernachlässigbar bei statischem HTML).
- Accessibility der erweiterten Tabelle (WCAG 2.1 AA für Datentabellen — kein akutes Problem, da die Tabelle keine komplexen Header-Verknüpfungen einführt).
- Figma-API-Verfügbarkeit des
readyForDev-Flags — das ist eine Slice-2-Frage, nicht eine Schema-Frage.
Entscheidung
docs/design/MAPPING.html erhält zwei neue orthogonale Spalten zwischen
Status und Last verified: Figma-Status und
Jira Sub-Task. Die bestehende Status-Spalte bleibt unverändert.
Das neue 8-Spalten-Schema:
<thead>
<tr>
<th>Figma-Frame</th>
<th>Figma-Node-ID</th>
<th>SDC / Komposition</th>
<th>Status</th> <!-- Implementierungs-Parity: matched|partial|gap|obsolete -->
<th>Figma-Status</th> <!-- NEU: ready-for-dev|wip|archived|- -->
<th>Jira Sub-Task</th> <!-- NEU: P2503-<n> | leer -->
<th>Last verified</th>
<th>Notes</th>
</tr>
</thead>
Akzeptierte Werte für Figma-Status:
ready-for-dev— Frame in Figma als „Ready for Dev" markiert (Dev Mode Marker).wip— Default für nicht-markierte Frames; Designer hat Frame noch nicht freigegeben.archived— Frame aus Figma entfernt oder als deprecated markiert.-— Status unbekannt (z.B. vor erstem Scanner-Update nach Migration).
Akzeptierte Werte für Jira Sub-Task:
P2503-<n>— Key des angelegten Sub-Tasks unter P2503-83.- Leer — Sub-Task noch nicht angelegt; Frame ist damit Pickup-Kandidat für den Skill
figma-ready-for-dev-to-jira.
Migrations-Schritt (Slice 1): Alle bestehenden Rows in MAPPING.html
erhalten zwei leere <td></td>. Bestehende Zellwerte werden nicht
verändert. Die Befüllung übernimmt der solcom-design-scanner-Agent in Slice 2.
Hinweis zur Spaltenzahl: Das Plan-Dokument
(2026-05-11-002-feat-figma-ready-for-dev-to-jira.html) nennt „7-Spalten-Schema"
im Prosa-Text, zeigt aber in der Schema-Box Sektion 04 korrekt 8 Spalten. Die 8-Spalten-Zählung
aus der Schema-Box ist kanonisch; die 7-Wording im Text ist ein Fehler im Plan-Dokument.
Rejected alternatives
-
Option A — Tupel-Status-Werte in der bestehenden
Status-Spalte: Verworfen, weil das Status-Vokabular auf 16 Kombinationen (4 Impl.-Status × 4 Figma-Status) anwächst, von denen mindestens 4 semantisch unsinnig sind. Das Scanner-/Skill-Parsing wird komplexer, und die klare Achsentrennung (Implementierungsstand vs. Design-Freigabe) geht verloren. Reviewer-Empfehlung aus der Customer-Lens-Konsultation (2026-05-11) sprach sich einstimmig über alle drei Lenses gegen Option A aus. Zusätzlicher Kipp-Edge-Case (aus der validierenden Konsultation): Ein Frame im Zustandobsolete(SDC im Code deprecated) mit gleichzeitig existierender Jira-Sub-Task-Key (vor der Deprecation angelegt) braucht in Option A trotzdem eine separateJira Sub-Task-Spalte — Option A landet damit bei 7 Spalten plus Tupel-Overhead, der einzige scheinbare Vorteil („weniger Spalten") löst sich auf. - Notes-Feld als Träger: Hätte keine Schema-Änderung erfordert, wäre aber weder maschinell lesbar noch idempotent. Der Skill müsste Free-Text in Notes parsen, statt ein definiertes Zellen-Feld lesen zu können.
-
Separate Tracking-Datei (z.B.
docs/design/JIRA-LINKS.html): Hätte MAPPING-Drift eingeführt — zwei Dateien mit Zustand zum gleichen Frame müssten synchron gehalten werden. Die MAPPING.html ist bewusst die einzige Source-of-Truth für Frame-Level-Informationen.
Consequences
-
Skill-Doku (
solcom-design-mapping/SKILL.md) muss auf 8-Spalten-Schema aktualisiert werden — Beispiel-Tabelle, Markdown-Referenz und Spalten-Regeln-Abschnitt werden in Slice 1 angepasst. - Bestehende MAPPING.html-Rows erhalten leere Spalten — einmaliger Migrations-Schritt, rückwärtskompatibel. Kein bestehender Wert wird verändert.
-
Scanner-Agent (
solcom-design-scanner.md) muss erweitert werden (Slice 2): neuer Workflow-Schritt fürFigma-Status-Ermittlung via Figma-API. Die Methode (obmcp__claude_ai_Figma__get_metadatadasreadyForDev-Flag exponiert oder ein anderer Ansatz nötig ist) ist Gegenstand der Slice-2-Sondierung. -
Skill
figma-ready-for-dev-to-jira(Slice 3) kann dieJira Sub-Task-Spalte als Idempotenz-Anker nutzen: leere Zelle = Pickup-Kandidat, befüllte Zelle = bereits angelegt → kein Duplicate-POST. -
Tabellenbreite: Die MAPPING-Tabelle wächst von 6 auf 8 Spalten.
Auf kleinen Viewports kann horizontales Scrollen nötig sein.
Das MAPPING-CSS hat aktuell kein
overflow-x: auto— falls horizontales Scrollen stört, kann die Regel in einem separaten Schritt ergänzt werden. -
Status-Vokabular-Erweiterungsregel (aus Skill-Doku: „Erweiterung nur per ADR")
gilt analog für
Figma-Status-Werte. Dieser ADR dokumentiert die initiale Wertmenge; spätere Erweiterungen brauchen einen neuen ADR.