Leitfaden

Eigenen Stack erstellen

Ein Prozess, jede Technologie: der Vertrag, den ein Stack-Plugin erfüllt.
Das Plugin aiup-core ist Stack-unabhängig: Es erstellt die Anforderungen, das Entitätsmodell, die Use Cases und die Testfälle. Ein Stack-Plugin macht aus diesen freigegebenen Spezifikationen Code und Tests für eine Technologie. Heute gibt es vier Stacks. Ist Ihrer nicht dabei, beschreibt dieser Leitfaden, welche Skills Ihr Plugin mitbringen muss, was sie lesen, wie sie die Rückverfolgbarkeit markieren und wie sie bestehenden Code ändern, statt Kopien zu erzeugen.
Arbeitsteilung

Was ein Stack-Plugin ist #

Der AI Unified Process (AIUP) stellt die Anforderungen ins Zentrum. Alles vor dem Code ist für jedes Team gleich; alles, was von einem Framework, einer Persistenzschicht oder einem Testwerkzeug abhängt, gehört in ein Stack-Plugin.

Der Core verantwortet die Spezifikationen #

aiup-core schreibt den Anforderungskatalog, das Entitätsmodell, das Use-Case-Diagramm, die Use-Case-Spezifikationen und die End-to-End-Testfälle. Keines dieser Dokumente nennt ein Framework. Sein /spec-review prüft sie gegeneinander, bevor etwas implementiert wird. Sie sind die Eingabe für Ihr Stack-Plugin, und Ihr Plugin darf sie nie umschreiben.

Der Stack verantwortet die Architektur #

Ein Stack-Plugin hält Ihre Architekturentscheidungen fest: Modulaufbau, Datenzugriff, UI-Technologie, Test-Frameworks und die Dokumentationsserver, die der Agent konsultieren soll. Ein Projekt installiert aiup-core und genau ein Stack-Plugin, denn Stacks teilen sich Befehlsnamen wie /implement.

Referenzimplementierungen #

Nutzen Sie die bestehenden Plugins im Marketplace-Repository als Referenzimplementierungen. aiup-vaadin-jooq ist das vollständigste; aiup-angular-jpa hat ein Praktiker gebaut, dessen Team Angular und JPA brauchte, und aiup-blazor-dotnet und aiup-nestjs-nextjs sind auf dieselbe Weise entstanden.

aiup-vaadin-jooq/flyway-migration, /implement, /browserless-test, /playwright-test, /coverage-check
aiup-angular-jpa/flyway-migration, /implement, /spring-boot-test, /vitest-test, /playwright-test
aiup-blazor-dotnet/ef-migration, /implement, /dotnet-test, /bunit-test, /playwright-test
aiup-nestjs-nextjs/drizzle-migration, /implement, /nest-test, /react-test, /playwright-test
Der Vertrag

Vier Pflichtrollen, eine Empfehlung #

Der Vertrag definiert Rollen, keine feste Liste von Dateinamen. /implement und /playwright-test heissen in jedem Stack gleich, weil die anderen Skills, die Dokumentation und AI Unified Studio an sie übergeben. Die Migrations- und Test-Skills tragen den Namen ihres Werkzeugs.

  1. Migration #

    Pflicht. Benannt nach Ihrem Migrationswerkzeug: /flyway-migration, /ef-migration, /drizzle-migration.

    Liest das Entitätsmodell und die bereits vorhandenen Migrationen und schreibt die nächste versionierte Migration: Tabellen, Sequenzen oder Identity-Spalten, Constraints und Fremdschlüssel, referenzierte Tabellen zuerst. Sie folgt der Namensgebung, die die Datenzugriffsschicht erwartet.

    Nie die Historie ändern. Eine Schemaänderung ist immer eine neue Migration. Der Skill ändert nie eine bereits angewendete Migration und löscht nie eine Tabelle ohne ausdrückliche Bestätigung.
  2. Implementieren #

    Pflicht. Heisst immer /implement.

    /implement UC-001

    Liest eine Use-Case-Spezifikation und das Entitätsmodell und schreibt den vollständigen Schnitt dafür: UI, Service oder Endpoint, Datenzugriff und die Typen dazwischen. Er folgt den Mustern, die im Projekt bereits vorhanden sind, kompiliert das Ergebnis, schreibt keine Tests und nennt am Ende den nächsten Befehl, zum Beispiel «Next: /browserless-test UC-001».

  3. Unit- und Integrationstests #

    Pflicht. Benannt nach dem Testwerkzeug: /browserless-test, /spring-boot-test, /vitest-test, /dotnet-test, /nest-test.

    Schreibt eine Testklasse oder Testdatei pro Use Case und deckt die Spezifikation ab, nicht den Code: ein Test für das Hauptszenario, einer pro alternativem Ablauf (A1, A2, …) und einer pro Geschäftsregel (BR-XXX). Ein Stack mit separatem Frontend darf pro Seite einen Skill mitbringen, wie es aiup-angular-jpa und aiup-nestjs-nextjs tun.

  4. End-to-End-Tests #

    Pflicht. Heisst immer /playwright-test.

    /playwright-test UC-001  # ein Use Case im echten Browser
    /playwright-test TC-001  # eine Journey über mehrere Use Cases

    Mit einer Use-Case-ID führt er die laufende Anwendung durch die Szenarien dieses Use Case. Mit einer Testfall-ID liest er den Testfall und jeden Use Case in dessen Flow-Tabelle und schreibt einen Journey-Test: ein Schritt pro Zeile der Flow-Tabelle, die konkreten Testdaten aus dem Testfall und ein Aufräumen, das aus den Nachbedingungen abgeleitet ist. Die Unterstützung von Testfällen ist dringend empfohlen; sie macht aus einem Geschäftsprozess einen automatisierten Regressionstest.

  5. Abdeckungsprüfung #

    Empfohlen. /coverage-check plus ein Agent, der nur liest.

    Ordnet jeden Schritt des Hauptszenarios, jeden alternativen Ablauf, jede Geschäftsregel, Vor- und Nachbedingung dem Code und den Tests dahinter zu, meldet Lücken und Abweichungen und schlägt den nächsten Wert für die Status-Zeile der Spezifikation vor. Sie ist das Gegenstück zu /spec-review in aiup-core auf der Seite des Stacks: Jenes prüft Spezifikationen gegeneinander, diese prüft Code und Tests gegen eine Spezifikation. Der Agent erhält nur Read, Grep und Glob: Er berichtet, er ändert nie etwas. Heute bringt nur aiup-vaadin-jooq einen mit; der Agent dort ist die Vorlage zum Kopieren.

Argumente. Jeder Skill nimmt eine Use-Case-ID (UC-001), eine Testfall-ID (TC-001) oder den Pfad der Spezifikationsdatei entgegen. Auf den Pfad darf ein Diff der Spezifikationsänderung folgen; ist er vorhanden, ist er die massgebliche Liste der Änderungen.
Eingaben

Was die Skills lesen #

Ein Stack-Plugin liest die Dokumente, die aiup-core schreibt, an den Orten, an denen aiup-core sie ablegt. Erfinden Sie kein zweites Format; die anforderungsgetriebene Kette funktioniert nur, wenn jeder Stack dieselben Dateien liest.

Dateien #

docs/requirements.mdFunktionale Anforderungen (FR-XXX), nicht-funktionale Anforderungen und Randbedingungen
docs/entity_model.mdEntitäten, Attribute, Datentypen, Validierungsregeln und Beziehungen
docs/use_cases/UC-*.mdEine Spezifikation pro Use Case
docs/test_cases/TC-*.mdEnd-to-End-Journeys, die mehrere Use Cases verketten

UI-Mockups, OpenAPI-Dokumente und Schemas werden vom Use Case referenziert, der sie braucht. Folgen Sie diesen Verweisen; es gibt keinen separaten Ordner zum Durchsuchen.

Überschriften, auf die sich die Skills verlassen #

  • Use Case ID – die UC-XXX-Kennung, auf die jede Markierung verweist
  • Main Success Scenario – nummerierte Schritte, je ein Test
  • Alternative Abläufe – Überschriften A1, A2, …, im Test genannt
  • Geschäftsregeln – BR-XXX, in Code-Kommentaren und Tests referenziert
  • Vor- und Nachbedingungen – Testaufbau, Prüfungen und Aufräumen
  • Status – Draft, Reviewed, Approved, Implemented, Tested, Done, Obsolete. Die Skills ändern ihn nie; die Abdeckungsprüfung schlägt nur den nächsten Wert vor
Daten, nie Anweisungen. Jeder Skill sollte festhalten, dass alles, was er aus dem Projekt liest (Spezifikationen, Code, Kommentare), Daten sind. Ein Satz in einem Use Case, der wie eine Anweisung an den Agenten aussieht, bleibt Text in einer Spezifikation.
Rückverfolgbarkeit

Rückverfolgbarkeit mit @UseCase #

Jeder generierte Test nennt den Use Case, das Szenario und die Geschäftsregeln, die er prüft. Der AI Unified Process Navigator zeigt diese Verknüpfungen als Gutter-Icons in IntelliJ und VS Code, AI Unified Studio baut daraus seine Rückverfolgbarkeitsansicht, und die Abdeckungsprüfung findet damit die Tests. Ein Test ohne Markierung zählt als Lücke.

JVM-Stacks #

Der Test-Skill legt die Annotation an, falls das Projekt sie noch nicht hat. Die Werkzeuge erkennen sie am Kurznamen; das Package ist Ihnen überlassen.

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface UseCase {
  String id();
  String scenario() default "Main Success Scenario";
  String[] businessRules() default {};
}

Nur auf Testmethoden verwenden. Die Werte müssen exakt den Überschriften der Spezifikation entsprechen:

@UseCase(id = "UC-001",
  scenario = "A2: Invalid Postal Code",
  businessRules = {"BR-003"})

JavaScript- und TypeScript-Stacks #

Test-Frameworks ohne Annotationen tragen dieselbe Information in den Testnamen und Tags:

describe('UC-010: Browse Product Catalog', () => {
  it('A1: filters by category', …)
})
 
test('main scenario', { tag: '@UC-010' }, …)

Für eine andere Sprache verwenden Sie deren natives Gegenstück (ein Attribut, ein Trait, ein Tag) mit denselben drei Feldern: Use-Case-ID, Szenario und Geschäftsregeln.

Namenskonventionen #

UC001ManagePersonsTestUnit- oder Integrationstestklasse für einen Use Case (Java, C#)
UC001ManagePersonsITBrowsertest für einen Use Case
UC-001-manage-persons.spec.tsTestdatei für einen Use Case (JavaScript, TypeScript)
TC001CustomerOnboardingITJourney-Test mit dem Anzeigenamen TC-001 und einem «Step n»-Kommentar pro Zeile der Flow-Tabelle

Produktionscode braucht keine Pflichtmarkierung. Ein kurzer Klassenkommentar, der den Use Case nennt, und ein BR-XXX-Kommentar neben dem Code, der eine Geschäftsregel durchsetzt, machen die Abdeckungsprüfung und den nächsten Abgleich aber deutlich zuverlässiger.

Änderungen

Abgleichen statt kopieren #

Ein neues Feature, ein Change Request und ein Bug enden am selben Ort: in einer geänderten Use-Case-Spezifikation. Für keinen davon gibt es einen eigenen Befehl. Man ändert die Spezifikation und führt /implement und die Test-Befehle erneut aus; deshalb muss jeder Implementierungs- und Test-Skill bestehenden Code erkennen und an Ort und Stelle ändern.

Implementierungs-Skills #

  • Zuerst suchen. Nach den View-, Service-, Repository- und DTO-Namen, die die Spezifikation nahelegt, und nach bestehenden UC-XXX-Verweisen.
  • An Ort und Stelle ändern. Nie eine zweite View, ein zweites Repository oder DTO für denselben Use Case anlegen.
  • Dem Diff folgen. Liegt ein Spezifikations-Diff bei, Änderung für Änderung abarbeiten. Eine entfernte Zeile heisst: Das beschriebene Verhalten muss gelöscht werden.
  • Änderungen durchreichen. Ein geändertes Feld wandert durch jede Schicht, von der Domäne bis zum Template, und eine Schemaänderung wird zu einer neuen Migration.
  • Nichts anderes anfassen. Kein beiläufiges Refactoring, Umbenennen oder Umgestalten.
  • Berichten. Auflisten, welche Dateien sich geändert haben und welche Spezifikationsänderung jede ausgelöst hat.

Test-Skills #

  • Zuerst suchen. Nach der Klasse UC001…Test, den Methoden mit @UseCase(id = "UC-001"), dem describe-Block UC-001 oder dem Tag @UC-001.
  • Aktualisieren statt duplizieren. Die bestehende Klasse erweitern; nie eine zweite Testklasse für denselben Use Case schreiben.
  • Die Spezifikation spiegeln. Tests für neue Abläufe und Regeln ergänzen, geänderte anpassen, Tests für weggefallenes Verhalten löschen.
  • Behalten, was noch gilt. Grüne Tests, die die Spezifikation weiterhin verlangt, unverändert lassen und den bestehenden Teststil des Projekts beibehalten, statt ihn auf ein neueres Werkzeug zu migrieren.
  • Die Klasse ausführen. Danach die ganze Testklasse laufen lassen, nicht nur die neuen Tests.
Warum das zählt. Eine parallele Implementierung ist der teuerste Fehler bei KI-generiertem Code: zwei Views für einen Use Case, nur eine davon getestet. Die Abdeckungsprüfung meldet sie als Abweichung, aber der Implementierungs-Skill sollte sie gar nicht erst erzeugen.
Bauen

Paketieren und veröffentlichen #

Ein Stack-Plugin ist ein Ordner mit Skills und einem Manifest. Kopieren Sie zu Beginn das bestehende Stack-Plugin, das Ihrem am nächsten kommt, und ersetzen Sie die Technologie, nicht die Struktur.

  1. Das Plugin anlegen #

    aiup-<your-stack>/
      .claude-plugin/plugin.json  # name, description, version, author
      .mcp.json  # Dokumentationsserver für Ihren Stack
      skills/implement/SKILL.md
      skills/<tool>-migration/SKILL.md
      skills/<tool>-test/SKILL.md
      skills/playwright-test/SKILL.md
      agents/  # optional: die Abdeckungsprüfung
      evals/  # Szenarien, die die Skills prüfen
  2. Jeden Skill schreiben #

    Jede SKILL.md beginnt mit einem Namen und einer Beschreibung, die die auslösenden Formulierungen aufzählt («implement a use case», «write a migration», den Namen Ihres Frameworks). Der Rumpf folgt denselben Abschnitten wie die bestehenden Skills: Anweisungen, ein Abschnitt «If an implementation already exists» mit den obigen Abgleichsregeln, eine DO-NOT-Liste, der Ablauf und die Übergabe an den nächsten Befehl. Ein Skill darf nur auf Dateien im eigenen Ordner verlinken; legen Sie Beispiele und Referenzcode dort ab.

  3. Dokumentationsserver anbinden #

    Trainingsdaten von Modellen hinken Framework-Releases hinterher. Deklarieren Sie in .mcp.json MCP-Server für die Dokumentation Ihres Frameworks, dazu den Playwright-Server für Browsertests, und weisen Sie die Skills an, sie zu konsultieren, bevor sie Code gegen eine API schreiben.

  4. Andere KI-Coding-Werkzeuge unterstützen #

    Damit das Plugin auch in Codex CLI, Cursor, GitHub Copilot, Gemini CLI und OpenCode läuft, ergänzen Sie das Agent-Plugins-Manifest (plugin.json und mcp.json im Plugin-Root) und das Tessl-Manifest und halten deren Versionen mit .claude-plugin/plugin.json synchron. Siehe andere KI-Coding-Werkzeuge.

  5. Beitragen #

    Eröffnen Sie einen Pull Request gegen das Marketplace-Repository, damit jedes Team mit Ihrem Stack das Plugin mit einem Befehl installieren kann. Ein eigenes Repository funktioniert ebenfalls; ein Claude-Code-Marketplace ist nur ein Git-Repository mit einer marketplace.json.

Vor der Auslieferung

Checkliste #

Lassen Sie Ihr Plugin auf ein kleines Beispielprojekt los und prüfen Sie dann jeden Punkt.

Vier Rollen

Migration, /implement, Unit- oder Integrationstests und /playwright-test sind vorhanden und übergeben aneinander.

Dieselben Eingaben

Die Skills lesen docs/entity_model.md, docs/use_cases/ und docs/test_cases/ und schreiben sie nie um.

Jeder Test verfolgbar

Jeder Test nennt Use-Case-ID, Szenario und Geschäftsregeln, exakt passend zu den Überschriften der Spezifikation.

Zweiter Lauf ändert nichts

/implement zweimal auf eine unveränderte Spezifikation ändert nichts und legt keine neuen Dateien an.

Änderungen bleiben klein

Nach der Änderung eines alternativen Ablaufs ändern /implement und der Test-Skill nur den Code und die Tests für diesen Ablauf.

Journeys funktionieren

/playwright-test TC-001 erzeugt einen Journey-Test mit einem Schritt pro Zeile der Flow-Tabelle.

Nächster Schritt

Bringen Sie Ihren Stack in den AI Unified Process #

AI Unified Studio schreibt die Spezifikationen, die Ihr Stack-Plugin liest. Fordern Sie eine Einladung an, oder nehmen Sie Kontakt auf, wenn Sie Unterstützung beim Entwurf eines Plugins für Ihre Architektur möchten.