Implementation plan · SOLCOM-Doku-Infrastruktur

Figma ready-for-dev → Jira Sub-Tasks

Auftrag Neuer Skill, der Figma-Frames mit dem ready-for-dev-Marker im SOLCOM-Design-System-File als Jira-Sub-Tasks unter P2503-83 anlegt und die Verknüpfung in docs/design/MAPPING.html pflegt. Orchestrierung durch den neuen Skill, Figma-Scan delegiert an den bestehenden solcom-design-scanner-Agent.
Phases
2
Slices
4
Parent-Issue
P2503-83
Doc-Strand
design + adr
01

Slice-Übersicht

Tracer-Bullet-Slicing in Dependency-Reihenfolge. Phase 1 = Slices 1 + 2 (Schema + Scanner-Erweiterung), Phase 2 = Slices 3 + 4 (Skill MVP + Multi-Frame mit Bündeln).

Phase / Slice Title Type Blocked by
1 · S1 MAPPING-Schema-Erweiterung + ADR HITL
1 · S2 Scanner-Agent ready-for-dev-Awareness AFK S1
2 · S3 Skill-Skelett, ein Frame, kein Bündeln HITL S1, S2
2 · S4 Multi-Frame-Loop + Bündeln HITL S3
02

Slice-Details

Jeder Slice ist eigenständig demobar. Akzeptanz-Bullets sind die Verifikations-Checks, mit denen ein Slice „done" deklariert wird.

S1

MAPPING-Schema-Erweiterung + ADR

HITL · blocked by —

ADR 0NNN-mapping-figma-status-as-second-dimension.html dokumentiert die Schema-Entscheidung: zwei Status-Dimensionen statt eines erweiterten Status-Tupels (z. B. gap-ready-for-dev). Hard-to-reverse + surprising-without-context + real-trade-off → ADR wird gemäß solcom-adr-workflow erstellt, mit Konsultation des customer-lens-reviewer-Agents (≥ 2 Optionen). solcom-design-mapping-Skill-Doku wird auf das neue 7-Spalten-Schema umgestellt. Bestehendes docs/design/MAPPING.html wird migriert: zwei neue <th>-Header (Figma-Status, Jira Sub-Task), bestehende Rows bekommen zwei leere <td>-Zellen.

Akzeptanz
  • ADR liegt unter docs/adr/ mit den 4 kanonischen Sektionen und Reviewer-Konsultations-Log
  • solcom-design-mapping-Skill-Doku zeigt das neue 7-Spalten-Schema
  • docs/design/MAPPING.html validiert im Browser, alle bestehenden Rows haben zwei zusätzliche Spalten
  • LOG-Eintrag in docs/LOG.html für die Schema-Migration (Op: migrate)
S2

Scanner-Agent ready-for-dev-Awareness

AFK · blocked by S1

solcom-design-scanner.md bekommt einen neuen Workflow-Schritt: für jeden Frame wird das Figma-Status-Flag ermittelt (technische Recherche beim Implementieren: ob mcp__claude_ai_Figma__get_metadata das exponiert oder ein anderer MCP-Call gebraucht wird — Sondierung gehört in den Slice). Werte: ready-for-dev, wip (Default für nicht-markierte Frames), archived, - (unbekannt).

Akzeptanz
  • Scanner-Run auf dem SOLCOM-File schreibt die Figma-Status-Spalte für jeden Frame
  • Mindestens ein Frame in MAPPING.html zeigt ready-for-dev
  • Scanner-Agent-Doku referenziert den neuen Status-Workflow und nennt den MCP-Call, der das Flag liefert
  • Re-Scan ist deterministisch (gleiche Werte bei unverändertem Figma-State)
S3

Skill-Skelett, ein Frame, kein Bündeln

HITL · blocked by S1, S2

.claude/skills/figma-ready-for-dev-to-jira/SKILL.md entsteht analog zur Struktur von backlog-to-jira. Inhalt: Pflichtregeln (AskUserQuestion-Pflicht), Trigger-Phrasen, REST-API-Setup, ADF-Beschreibungsformat, Pre-Flight (REST + Figma-Auth). Workflow: Task-Tool ruft solcom-design-scanner auf → MAPPING.html parsen → ersten Frame mit Figma-Status = ready-for-dev und leerer Jira Sub-Task-Spalte nehmen → AskUserQuestion mit Optionen anlegen / skippen → bei Anlegen: REST-POST Sub-Task unter P2503-83 (ADF: User Story + Figma-Frame-Deep-Link, Label figma-node:<id>) → MAPPING-Zeile editieren (P2503-Key in Spalte schreiben) → LOG-Eintrag.

Akzeptanz
  • Skill auf einem ready-for-dev-Frame durchgelaufen → Sub-Task in P2503-83 erstellt
  • Sub-Task-Description enthält User Story + Figma-Deep-Link (ADF)
  • Sub-Task hat Label figma-node:<node-id>
  • MAPPING.html-Zeile zeigt die P2503-Sub-Task-Key in der neuen Spalte
  • Wiederholter Skill-Run skippt diesen Frame ohne API-Call (Idempotenz via MAPPING-Spalte)
S4

Multi-Frame-Loop + Bündeln

HITL · blocked by S3

Skill iteriert über alle qualifizierten Frames. AskUserQuestion-Optionen erweitert: anlegen / bündeln / skippen. Sammler-Logik: Beim ersten bündeln fragt der Skill nach einem Sammler-Namen, legt EINEN Sammler-Sub-Task an, merkt sich die Key. Bei späteren bündeln-Antworten zeigt der Skill die offenen Sammler zur Auswahl plus „neuer Sammler". Beim Anhängen an einen Sammler: Figma-Link wird via REST PUT in den Sammler-Body angehängt; alle MAPPING-Zeilen der gebündelten Frames tragen die Sammler-Key. Defense-in-Depth: JQL-Bulk-Check via Label figma-node:<id> beim Skill-Start für Drift-Detection.

Akzeptanz
  • Drei Frames hintereinander durchgespielt: 1× anlegen, 1× bündeln (Sammler-Erst), 1× bündeln (an Sammler)
  • Sammler-Sub-Task zeigt zwei Figma-Links im Body
  • MAPPING-Spalten korrekt: drei verschiedene / zwei gleiche Keys
  • JQL-Bulk-Check loggt Frame ohne MAPPING-Eintrag aber mit existierendem Label als Drift
  • docs/agents/skills.html-Inventar referenziert den neuen Skill mit Trigger-Phrasen
03

Daten- und Kontroll-Fluss

Wer ruft wen auf, welche Datei wird angefasst, an welcher Stelle entsteht der Jira-Sub-Task. Solid = Lese-/Schreib-Pfad. Gestrichelt = AskUserQuestion-Interaktion.

User triggert Skill figma-ready-for-dev-to-jira Orchestrator-Skill solcom-design-scanner Agent · via Task-Tool Figma MCP get_metadata / readyForDev docs/design/MAPPING.html 7 Spalten · Source-of-Truth User (Loop) AskUserQuestion pro Frame Jira REST API v3 POST /issue · P2503-83 sub-task P2503-83 F-30 Sub-Task entsteht /figma-ready-for-dev-to-jira Task: refresh + ready-for-dev-flag scan schreibt Spalten parst Rows POST + Label erzeugt Frame-Preview anlegen / bündeln / skippen

Der Orchestrator-Skill ist die einzige Stelle, die schreibt — MAPPING.html und Jira werden NUR vom Skill verändert. Der Scanner-Agent schreibt zwar MAPPING.html (Slice 2), aber nicht die Jira Sub-Task-Spalte.

04

Schlüssel-Schemas

Die zwei Stellen, an denen sich der Skill verbeißen kann: das ADF-Body-Schema für den Sub-Task und die neue 7-Spalten-Geometrie der MAPPING.html.

Sub-Task ADF body (Slice 3)
{
  "fields": {
    "project":   { "key": "P2503" },
    "parent":    { "key": "P2503-83" },
    "issuetype": { "name": "Sub-task" },
    "summary":   "Komponente: <Frame-Name>",
    "labels":    ["figma-node:<node-id>"],
    "description": {
      "type": "doc", "version": 1,
      "content": [
        { "type": "paragraph", "content": [
          { "type": "text",
            "text": "Als Frontend-Dev möchte ich die Komponente <Frame-Name> als SDC, um sie auf Pages einsetzen zu können." }]},
        { "type": "paragraph", "content": [
          { "type": "text", "text": "Figma: " },
          { "type": "text", "text": "<frame-deep-link>",
            "marks": [{ "type": "link",
              "attrs": { "href": "<frame-deep-link>" }}]}]}
      ]
    }
  }
}
MAPPING.html — neuer Header (Slice 1)
<thead>
  <tr>
    <th>Figma-Frame</th>
    <th>Figma-Node-ID</th>
    <th>SDC / Komposition</th>
    <th>Status</th>           <!-- Impl -->
    <th>Figma-Status</th>     <!-- NEU -->
    <th>Jira Sub-Task</th>    <!-- NEU -->
    <th>Last verified</th>
    <th>Notes</th>
  </tr>
</thead>

// Werte Figma-Status:
//   ready-for-dev  → in Figma freigegeben
//   wip            → Designer-Default, noch nicht freigegeben
//   archived       → aus Figma entfernt / deprecated
//   -              → unbekannt (z. B. vor Scanner-Update)

// Werte Jira Sub-Task:
//   P2503-<n>  → Link/Plain-Text-Key
//   leer       → noch nicht angelegt (Skill-Pickup-Kandidat)
05

Risiken & Mitigations

Risiko
Sev
Mitigation
Figma-API exponiert readyForDev nicht als einfaches Node-Property — Scanner-Sondierung scheitert.
HIGH
Slice 2 enthält explizite Sondierungs-Sub-Task. Fallback: Frame-Naming-Convention (z. B. Suffix · dev) oder Figma-Plugin-Export als Quelle. Sondierungs-Ergebnis kommt in den Slice-2-PR.
MAPPING-Drift: Skill schreibt Spalte, User commitet nicht — bei nächstem Run wird der gleiche Frame nochmal angelegt → Duplicate-Sub-Task in Jira.
MED
Defense-in-Depth in Slice 4: JQL-Bulk-Check via Label figma-node:<id> beim Skill-Start, Treffer → MAPPING-Zeile auto-heilen + Abbruch mit Hinweis statt POST.
Bündel-State-Loss: User unterbricht den Loop nach 5 Frames, beim Re-Start sind die offenen Sammler vergessen.
MED
Sammler-Sub-Tasks werden via Label-Pattern erkannt (z. B. figma-bundle:<slug>). Beim Skill-Start lädt der Loop offene Sammler aus Jira, nicht aus In-Memory-State.
ADF-Body falsch geschachtelt → Jira gibt 400 zurück, Sub-Task entsteht trotz erfolgreicher AskUserQuestion nicht.
LOW
Slice 3 enthält Dry-Run-Mode: ADF wird gegen POST /issue/createmeta validiert, bevor der echte POST läuft. Vorbild: backlog-to-jira.
Scanner-Run mit aktuellen Auth-Problemen — Skill blockiert ohne klare Fehlermeldung.
LOW
Pre-Flight prüft Figma-MCP whoami und Jira /project/P2503. Bei Fehler: klare Abort-Message mit Hinweis auf die fehlende Auth.
06

Offene Detail-Defaults

Aus dem Grilling übrig gebliebene kleine Entscheidungen — als Defaults gesetzt, beim Bauen ggf. korrigierbar.

Skill-Name figma-ready-for-dev-to-jira
Analog backlog-to-jira. Lang, aber descriptive. Alternative: figma-rfd-to-jira (kompakter).
Entscheiden · vor Slice 3
Trigger-Phrasen
„ready for dev nach Jira", „Figma ready-for-dev als Sub-Tasks", „figma-ready-for-dev-to-jira". Englisch + deutsch gemischt analog zu backlog-to-jira.
Entscheiden · vor Slice 3
Sub-Task-Label-Schema figma-node:<node-id>
Zusätzlicher Drift-Detection-Identifier, Vorbild Backlog-Skill-Pattern (backlog:F-30). Sammler bekommen zusätzlich figma-bundle:<slug>.
Entscheiden · vor Slice 3
Verhalten bei Frame ohne MAPPING-Eintrag
Scanner sollte das verhindern (Slice 2 schreibt für jeden Frame eine Zeile). Falls doch: Skill bricht mit Hinweis ab, statt eine MAPPING-Zeile selbst zu erzeugen — sauberere Trennung der Verantwortlichkeiten.
Entscheiden · vor Slice 4