BlockingDer {% if effective_style == 'matching' %}…{% else %}…{% endif %}-Block ist 1:1 im <a>- und <span>-Zweig kopiert. Nach AGENTS.md Regel 6 ("Compute values before HTML") und Regel 1 ("Conditionals Must Use CVA") muss Branching-Logik vor dem HTML-Bereich in eine Variable ausgelagert werden — z.B. {% set inner_markup %}…{% endset %}, analog zum vorhandenen icon_markup-Pattern. Die Duplizierung macht künftige Änderungen an der matching-Substruktur fehleranfällig.
aria-label auf nicht-interaktivem <span>Blocking<span aria-label="{{ label }}"> ist ein ARIA-Anti-Pattern: aria-label ist semantisch für interaktive Elemente mit einer Rolle. Auf einem <span> ohne explizite role wird es von Screenreadern ignoriert oder erzeugt konfuses Verhalten — zudem ist der sichtbare Textinhalt schon vorhanden, das Attribut also redundant. Fix: aria-label am <span> entfernen.
weiß als Nicht-ASCII-Enum-KeyNitYAML-Enum-Keys sind typischerweise ASCII-safe Identifier. weiß mit Umlaut funktioniert technisch, widerspricht aber der Codebase-Konvention (alle anderen Enum-Keys: primary, secondary, lime, disabled). Empfehlung: weiss oder white als Key, weiß nur im meta:enum-Label. Außerdem muss der Twig-Whitelist-Check (style in ['weiß', …]) und der effective_style-Fallback entsprechend angepasst werden.
rounded-[30px] in Base-Klassen (Figma-Abweichung)NitDie Figma-Spec (Story-File, Varianten-Tabelle) definiert rounded-[10px] für weiß/lime/disabled und rounded-[20px] für lined/matching. Die Implementierung setzt rounded-[30px] pauschal in der Base — das überschreibt alle Varianten ohne CVA-Override. Korrekte Lösung: rounded aus der Base entfernen und als Variant-spezifischen Wert in die CVA-Variants aufnehmen.
px-[18px] in Base-Klassen (Figma-Abweichung)NitFigma-Spec: px-[4px] (lime/dark/disabled) bzw. px-[8px] py-[4px] (lined/matching). Implementiert: px-[18px] py-1 für alle Varianten. Muss in CVA-Variants aufgesplittet werden.
iconPosition Variant-Key in camelCaseNitDer CVA-Variant-Key iconPosition weicht vom kebab-case-Muster anderer Komponenten ab (vgl. group.twig: flex-direction, group-align). Keine explizite Regelverletzung, aber inkonsistent mit dem Codebase-Stil.
weight: 'bold' im Icon-Include (neu, unverified)Nitweight: 'bold' war vorher nicht gesetzt und ist neu hinzugekommen. AGENTS.md Regel 12 ("Only pass configurable props") verlangt, dass nur Props übergeben werden die in der Ziel-Komponente (icon.component.yml) definiert sind. Bitte gegen das Icon-Schema verifizieren ob weight und der Wert 'bold' valide sind.
BlockingDie Canvas-Registry-Datei (config/sync/canvas.component.sdc.byte_theme.badge.yml) ist nicht im PR enthalten, obwohl badge.component.yml sich geändert hat. Der gespeicherte active_version-Hash in der Registry wird nach dem Deploy nicht mehr zum geänderten Theme-SDC passen. Canvas greift dann auf fallback_metadata zurück oder verweigert das Rendering. Fix: ddev drush cex lokal ausführen, die aktualisierte canvas.component.sdc.byte_theme.badge.yml in den PR aufnehmen.
default_value: primary nicht mehr im EnumBlockingDie Canvas-Registry enthält default_value: primary für das style-Prop. Das neue Schema listet primary nicht mehr in der Enum. Canvas übergibt primary an Twig — der effective_style-Fallback mappt auf weiß, aber der Canvas-Editor zeigt beim Öffnen eines bestehenden Blocks einen ungültigen Wert. Außerdem würden alle bestehenden Canvas-Blöcke mit style: primary oder style: secondary still auf weiß fallen statt auf das dokumentierte Fallback-Ziel (lime laut PRD). Fix: Canvas-Registry auf default_value: weiß (oder den korrekten Default) aktualisieren und mitexportieren.
weiß Enum-Key: latentes Encoding-RisikoNitCanvas übergibt den Enum-String-Wert as-is an Twig. Solange alle Stellen (Canvas-Registry, Twig-Whitelist, CVA-Keys) identisches UTF-8 verwenden, funktioniert das. Risiko: ein Config-Round-Trip, YAML-Normalizer oder ein Editor könnte den String normalisieren (weiß, weiss). ASCII-Keys eliminieren das Risiko vollständig.
abbreviation und percentage für matchingNitDas PRD definiert matching als Substruktur mit zwei neuen Props (abbreviation, percentage). Beide fehlen im Schema — Content-Autoren können die matching-Variante im Canvas-Editor nicht mit dynamischen Werten befüllen. Das ist kein sofortiger Render-Bruch, aber der wesentliche Mehrwert der Variante (prozentualer Match-Indikator) ist für Canvas-Redakteure nicht zugänglich.
url-Prop ohne format: uriNiturl ist als type: string ohne format: uri/uri-reference deklariert. Canvas mappt string+uri auf ein Link-Widget — ohne Format erscheint ein simples Text-Input ohne URL-Validierung. Kein Render-Bruch, aber Editor-UX-Degradation gegenüber dem erwartbaren Verhalten.
weiß statt darkBlockingJira-AK und PRD (TL;DR + Schema-Änderungen-Sektion) spezifizieren [lime, dark, disabled, lined, matching]. Die Implementierung liefert [weiß, lime, disabled, lined, matching]. Der Enum-Key dark fehlt, stattdessen wird ein undokumentierter Key weiß eingeführt. Im PRD und Story-File findet sich keine explizite Entscheidung, den Figma-Variantennamen dark durch weiß zu ersetzen — die Figma-Spec-Tabelle im Story-File listet ebenfalls dark als Variant-Key. Dieser Name-Mismatch bricht die Spec-Kongruenz.
weiß statt limeBlockingPRD und Story-File sind eindeutig: Legacy-Werte (primary, secondary, pill) werden via Twig-Fallback auf lime abgebildet. Die Implementierung mappt auf weiß. Bestehende Canvas-Blöcke mit alten Varianten erhalten damit ein visuell falsches Ergebnis (weißer Hintergrund statt Lime-Hintergrund).
abbreviation- und percentage-Props fehlenBlockingPRD (Schema-Änderungen-Sektion): "Die matching-Variante erhält zwei neue Props (abbreviation, percentage)". Story-File dokumentiert Kürzel (15px, weiß) und Prozentwert (19px, lime, bold) als separate Elemente der Substruktur. Beide Props sind weder im Schema deklariert noch wird percentage im Twig gerendert. Das matching-Badge zeigt nur Lime-Dot + Label-Text, aber keinen Prozentindikator.
rounded-[30px] statt figma-spez. RadienBlockingStory-File (Varianten-Spec-Tabelle, Figma-autoritativ): rounded-[10px] für lime/dark/disabled, rounded-[20px] für lined/matching. Implementiert: rounded-[30px] für alle Varianten einheitlich. Das ist eine visuelle Abweichung von der Figma-Spec auf einer Achse, die im PRD explizit als "Figma-konforme Klassen je Variante" gefordert wird.
px-[18px] statt figma-spez. PaddingBlockingStory-File (Varianten-Spec-Tabelle): px-[4px] für lime/dark/disabled, px-[8px] py-[4px] für lined/matching. Implementiert: px-[18px] py-1 für alle. Signifikante visuelle Abweichung gegenüber der Figma-Spec.
percentage-Rendering fehlt in matchingBlockingSelbst wenn label provisorisch als Kürzel-Ersatz akzeptiert wird: der Prozentwert-Textblock (font-bold text-[19px] text-[var(--brand-lime)]) fehlt komplett im Twig. Die Matching-Substruktur ist unvollständig implementiert.
OkJira nennt --color-lime, --color-dark-blue. Das Story-File korrigiert das explizit: korrekte Namen in theme.brand.css sind --brand-lime, --brand-dark-blue. Die Implementierung mit var(--brand-*) ist korrekt.
OkBadge-Node 61121:32532 auf Status matched gesetzt, partial-Eintrag entfernt. Wie verlangt.