docs: replace ASCII umlaut fallbacks with proper äöüß across all .md

Most German docs were written with `ue`/`ae`/`oe`/`ss` ASCII fallbacks
(`fuer`, `aenderung`, `koennen`, `gemaess`) — relic from older toolchain
constraints. Replaced 237 occurrences across 38 .md files with proper
umlauts and ß so the docs read naturally.

Substitutions are constrained to plain prose: fenced code blocks
(```...```), inline code spans (`...`), markdown link targets `[..](..)`,
and HTML comments are preserved verbatim. Path references like
`docs/howto-erste-aenderung.md` keep their original (umlaut-replaced)
filenames — only the surrounding prose is normalised.

Tool: bin/fix-md-umlauts.py (idempotent — no-op on already-clean files).
Re-runnable if ASCII fallbacks creep back in via copy-paste.

Doc-link-check + doc-drift-check stay green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-29 09:57:22 +02:00
parent 2e73cb98b4
commit 545bcc789b
39 changed files with 499 additions and 237 deletions

View File

@@ -1,6 +1,6 @@
---
name: core-guardrails
description: Verbindliche Guardrails fuer Architektur-, Refactor-, Zentralisierungs-, Standardisierungs- und Implementierungsaufgaben in diesem Starterkit. Verwenden, wenn Code geaendert, neu strukturiert oder gegen bestehende Layer-/UI-/Security-Standards geprueft werden soll.
description: Verbindliche Guardrails für Architektur-, Refactor-, Zentralisierungs-, Standardisierungs- und Implementierungsaufgaben in diesem Starterkit. Verwenden, wenn Code geändert, neu strukturiert oder gegen bestehende Layer-/UI-/Security-Standards geprüft werden soll.
---
# Core Guardrails
@@ -12,21 +12,21 @@ Durchgaengig dieselben technischen Grenzen durchsetzen, damit Core robust, wartb
## Verbindliche Regeln
1. MUST Layering einhalten (`pages` -> `Service` -> `Repository`, Templates nur Rendering).
2. MUST Request/Input/Validation-Contract einhalten (`requestInput()`, `FormErrors`, API-Validation ueber `ApiResponse::validationFromFormErrors(...)`, kein `ApiResponse::readJsonBody(...)` in `pages/api/v1/**`, keine direkten Superglobals in `pages/**`).
3. MUST AuthZ/RBAC serverseitig durchsetzen und im UI nur ueber `$viewAuth` steuern.
4. MUST Security-Guards einhalten (CSRF auf POST-Endpunkten, keine unredacted PII/Secrets in Logs/Audit-Meta, SQL nur vorbereitet ueber Repository).
5. MUST UI-Standards und Data-Contracts fuer Listen/Detailseiten nutzen (Wrapper, Partials, globaler Confirm-Dialog statt `window.confirm`, inklusive globaler Grid-Standards fuer rowInteraction/pageSize).
6. MUST Frontend-Hardcuts einhalten (keine inline ESM-Module in Templates/Pages, JS-`src` mit `assetVersion(...)`, zentrale Telemetrie fuer relevante Frontend-Warnings/Fetch-Fehler).
7. MUST Quality-Gates ausfuehren und Ergebnis transparent berichten.
8. MUST bei Konflikten den regelkonformen Weg waehlen oder den Konflikt als Blocker markieren.
2. MUST Request/Input/Validation-Contract einhalten (`requestInput()`, `FormErrors`, API-Validation über `ApiResponse::validationFromFormErrors(...)`, kein `ApiResponse::readJsonBody(...)` in `pages/api/v1/**`, keine direkten Superglobals in `pages/**`).
3. MUST AuthZ/RBAC serverseitig durchsetzen und im UI nur über `$viewAuth` steuern.
4. MUST Security-Guards einhalten (CSRF auf POST-Endpunkten, keine unredacted PII/Secrets in Logs/Audit-Meta, SQL nur vorbereitet über Repository).
5. MUST UI-Standards und Data-Contracts für Listen/Detailseiten nutzen (Wrapper, Partials, globaler Confirm-Dialog statt `window.confirm`, inklusive globaler Grid-Standards für rowInteraction/pageSize).
6. MUST Frontend-Hardcuts einhalten (keine inline ESM-Module in Templates/Pages, JS-`src` mit `assetVersion(...)`, zentrale Telemetrie für relevante Frontend-Warnings/Fetch-Fehler).
7. MUST Quality-Gates ausführen und Ergebnis transparent berichten.
8. MUST bei Konflikten den regelkonformen Weg wählen oder den Konflikt als Blocker markieren.
9. MUST NOT Extension-Architektur erfinden; dieses Thema ist aktuell Out of Scope.
## Vorgehen je Aufgabe
1. Scope bestimmen (`core`, `ui`, `api`, `mixed`).
2. Vorhandene Contracts zuerst suchen, dann wiederverwenden.
3. Aenderung minimal halten, keine Seiteneffekte ohne Grund.
4. Nach Aenderung die relevanten Gates ausfuehren.
3. Änderung minimal halten, keine Seiteneffekte ohne Grund.
4. Nach Änderung die relevanten Gates ausführen.
5. Rest-Risiken explizit benennen.
## Out of Scope

View File

@@ -16,18 +16,18 @@
## Input / Validation
1. MUST Input in `pages/**` ueber `requestInput()` lesen.
1. MUST Input in `pages/**` über `requestInput()` lesen.
2. MUST NOT `$_POST`, `$_GET`, `$_FILES`, `REQUEST_METHOD` in `pages/**` verwenden.
3. MUST NOT `$_SESSION`, `$_SERVER`, `$_COOKIE`, `$_ENV` in `pages/**` direkt verwenden.
4. MUST Form-Validation ueber `FormErrors` fuehren.
5. MUST API-Validation-Fehler ueber `ApiResponse::validationFromFormErrors(...)` ausgeben.
4. MUST Form-Validation über `FormErrors` führen.
5. MUST API-Validation-Fehler über `ApiResponse::validationFromFormErrors(...)` ausgeben.
6. MUST NOT `ApiResponse::readJsonBody(...)` in `pages/api/v1/**` verwenden.
## List-Data Endpoints
1. MUST `pages/**/data().php` als GET-only Endpunkte umsetzen (`gridRequireGetRequest()`).
2. MUST Query-Filter ueber `gridParseFilters(...)` + `filter-schema.php` normalisieren.
3. MUST NOT Query-Filter inline/parallele Alias-Parser in `data().php` neu einfuehren.
2. MUST Query-Filter über `gridParseFilters(...)` + `filter-schema.php` normalisieren.
3. MUST NOT Query-Filter inline/parallele Alias-Parser in `data().php` neu einführen.
## Security / API
@@ -35,11 +35,11 @@
2. MUST Tenant-Scope serverseitig erzwingen.
3. MUST CSRF auf POST-Endpunkten vor Body-Verarbeitung verifizieren.
4. MUST NOT PII/Secrets unredacted in Logs oder Audit-Metadata schreiben.
5. MUST SQL nur ueber Repository mit prepared statements ausfuehren.
5. MUST SQL nur über Repository mit prepared statements ausführen.
6. MUST extern UUID-first bleiben.
7. MUST API-Fehler konsistent halten (`error`, optional `errors`).
8. MUST OpenAPI im selben Merge aktualisieren, wenn API geaendert wird.
8. MUST OpenAPI im selben Merge aktualisieren, wenn API geändert wird.
## Pruef-Hinweis
## Prüf-Hinweis
- Harte Repo-Gates: `tests/Architecture/CoreStarterkitContractTest.php`

View File

@@ -2,69 +2,69 @@
## Listen-Standard
1. MUST Listen ueber `initStandardListPage(...)` initialisieren.
2. MUST Filter-Toolbar ueber zentrale Helper/Partials rendern.
3. MUST aktive Chips/Drawer-Verhalten ueber Standard-Contracts laufen lassen.
1. MUST Listen über `initStandardListPage(...)` initialisieren.
2. MUST Filter-Toolbar über zentrale Helper/Partials rendern.
3. MUST aktive Chips/Drawer-Verhalten über Standard-Contracts laufen lassen.
4. MUST NOT direkt `gridFiltersFromSchema(...)` oder `initListFilterExperience(...)` in Listen-Templates verwenden.
5. MUST NOT Legacy-Filter-Toggle-Markup (`data-toolbar-toggle`, `data-filter-overflow`, `data-filter-toggle`) neu einbauen.
6. MUST rowInteraction-Standard fuer Listen mit Row-Navigation beibehalten (sichtbare Action-Spalte + Enter + Doppelklick-Fallback).
6. MUST rowInteraction-Standard für Listen mit Row-Navigation beibehalten (sichtbare Action-Spalte + Enter + Doppelklick-Fallback).
7. MUST pageSize-Standard beibehalten (10/25/50/100, Toolbar rechts, URL > localStorage > default).
## Detailseiten-Standard
1. MUST Hauptformular mit `data-standard-detail-form="1"` markieren.
2. MUST Unsaved/Shortcut/Dirty-State ueber `initStandardDetailPage(...)` nutzen.
3. MUST Detail-Aktionen ueber Action-Policy-Contract (`data-detail-action-policy`, `data-detail-action-kind`, `data-detail-confirm-message`) steuern.
2. MUST Unsaved/Shortcut/Dirty-State über `initStandardDetailPage(...)` nutzen.
3. MUST Detail-Aktionen über Action-Policy-Contract (`data-detail-action-policy`, `data-detail-action-kind`, `data-detail-confirm-message`) steuern.
4. MUST NOT inline `confirm(...)` (`onclick` / `onsubmit`) auf standardisierten Detailseiten nutzen.
## Confirm + Telemetry Standard
1. MUST Confirm-Dialoge zentral ueber den globalen Confirm-Service abwickeln.
1. MUST Confirm-Dialoge zentral über den globalen Confirm-Service abwickeln.
2. MUST NOT `window.confirm(...)` in App-JS oder inline HTML-Handlern verwenden.
3. MUST relevante Frontend-Warnpfade zentral ueber Frontend-Telemetrie erfassen.
3. MUST relevante Frontend-Warnpfade zentral über Frontend-Telemetrie erfassen.
4. MUST NOT relevante UX-/Fehlerpfade nur als Console-Warnung implementieren.
## Frontend Page-Module Hard Cut
1. MUST Seiteninitialisierung ueber dedizierte Module unter `web/js/pages/*` umsetzen.
2. MUST Page-Config ueber `script[type="application/json"]` + `readPageConfig(...)` bereitstellen/lesen.
3. MUST alle JS-`src` in `pages/**` und `templates/**` ueber `assetVersion('...js...')` laden.
1. MUST Seiteninitialisierung über dedizierte Module unter `web/js/pages/*` umsetzen.
2. MUST Page-Config über `script[type="application/json"]` + `readPageConfig(...)` bereitstellen/lesen.
3. MUST alle JS-`src` in `pages/**` und `templates/**` über `assetVersion('...js...')` laden.
4. MUST NOT inline `<script type="module">...</script>` in `pages/**` oder `templates/**` verwenden.
## Component Lifecycle Runtime
1. MUST migrierte Komponenten ueber `init(root, config)` + `destroy()` standardisieren.
1. MUST migrierte Komponenten über `init(root, config)` + `destroy()` standardisieren.
2. MUST NOT migrierte Komponenten per `DOMContentLoaded`/Module-Sideeffect selbst auto-initialisieren.
3. MUST Listener, Timer und Observer, die in `init(...)` entstehen, in `destroy()` wieder abbauen.
4. MUST Runtime-Konfiguration ueber Page-Config (`readPageConfig(...)`) beziehen, keine verteilten Ad-hoc-Globals.
5. MUST host-gebundene UI-Komponenten ueber explizite `data-app-component`-Hosts im Markup binden.
6. Global-Utilities ohne natuerliches Host-Element MAY via Runtime `scope: 'global'` registriert werden, MUESSEN aber denselben Lifecycle-Contract inkl. `destroy()` einhalten.
4. MUST Runtime-Konfiguration über Page-Config (`readPageConfig(...)`) beziehen, keine verteilten Ad-hoc-Globals.
5. MUST host-gebundene UI-Komponenten über explizite `data-app-component`-Hosts im Markup binden.
6. Global-Utilities ohne natürliches Host-Element MAY via Runtime `scope: 'global'` registriert werden, MÜSSEN aber denselben Lifecycle-Contract inkl. `destroy()` einhalten.
## Shared Partials
1. MUST Listen-Titlebar ueber `templates/partials/app-list-titlebar.phtml` rendern.
2. MUST List-Tabs ueber `templates/partials/app-list-tabs.phtml` rendern.
3. MUST Purge-Action ueber `templates/partials/app-list-purge-action.phtml` rendern.
4. MUST Detail-Validation-Summary ueber `templates/partials/app-details-validation-summary.phtml` rendern.
1. MUST Listen-Titlebar über `templates/partials/app-list-titlebar.phtml` rendern.
2. MUST List-Tabs über `templates/partials/app-list-tabs.phtml` rendern.
3. MUST Purge-Action über `templates/partials/app-list-purge-action.phtml` rendern.
4. MUST Detail-Validation-Summary über `templates/partials/app-details-validation-summary.phtml` rendern.
## RBAC in Templates
1. MUST UI-Capabilities nur ueber `$viewAuth` lesen.
1. MUST UI-Capabilities nur über `$viewAuth` lesen.
2. MUST NOT `can('...')` in Templates verwenden.
## CSS Boundaries
1. MUST Styles moeglichst lokal in `web/css/components`, `web/css/layout` oder `web/css/pages` halten.
2. MUST NOT globale unscoped Overrides ohne klaren Scope einfuehren.
1. MUST Styles möglichst lokal in `web/css/components`, `web/css/layout` oder `web/css/pages` halten.
2. MUST NOT globale unscoped Overrides ohne klaren Scope einführen.
3. MUST Vendor-Overrides nur in `web/css/vendor-overrides/**` pflegen.
4. MUST bestehende CSS-Variablen bevorzugen statt neue Inline-Farbwerte zu verteilen.
## Komponenten in Formularen
1. MUST Core-Button-Klassen (`secondary outline small`, `danger outline small`) verwenden statt Custom-Button-CSS. Custom-CSS nur fuer Layout (z.B. `border-radius: 50%`).
1. MUST Core-Button-Klassen (`secondary outline small`, `danger outline small`) verwenden statt Custom-Button-CSS. Custom-CSS nur für Layout (z.B. `border-radius: 50%`).
2. MUST `margin-bottom: 0` auf Buttons, Inputs, Selects und Labels innerhalb selbststaendiger Komponenten in Formularen resetten (Core setzt `margin-bottom: var(--app-spacing)` global).
3. MUST Checkboxen in Flex-Containern mit expliziter Groesse (`width: 1.25em; height: 1.25em`) und `flex-shrink: 0` versehen (Core nutzt `appearance: none` mit Custom-Sizing).
4. MUST `position: sticky` mit `top: calc(var(--app-topbar-height) + ...)` verwenden, nicht `top: 0` (Topbar ist sticky).
5. MUST Icon-Only-Buttons mit `data-tooltip` und `aria-label` versehen.
6. MUST bei `grid-template-columns` mit mehr als einer Spalte ein `@media`-Fallback auf Single-Column definieren.
7. MUST bestehende `--app-*` CSS-Variablen fuer Farben verwenden, nie Farbwerte hardcoden.
7. MUST bestehende `--app-*` CSS-Variablen für Farben verwenden, nie Farbwerte hardcoden.

View File

@@ -29,18 +29,18 @@ Erwartung: jeweils `0`.
## JS-Scope
- Bei JS-Aenderungen Browser-Smoke mit DevTools-Console durchfuehren.
- Bei JS-Änderungen Browser-Smoke mit DevTools-Console durchführen.
- Erwartung: keine neuen JS-Errors.
## Docs-/Skills-Gates (schnell)
1. `bin/docs-link-check.sh`
- prueft Doku-Links in `README.md`, `docs/**`, `.agents/skills/**` und `.agents/**`
- `.agents/runs/**` ist standardmaessig ausgeschlossen (historische Artefakte)
- prüft Doku-Links in `README.md`, `docs/**`, `.agents/skills/**` und `.agents/**`
- `.agents/runs/**` ist standardmäßig ausgeschlossen (historische Artefakte)
2. `bin/docs-drift-check.sh`
- prueft bekannte Legacy-Drifts (entfernte Config-Pfade/Constants, obsolete Search-Marker)
- prüft bekannte Legacy-Drifts (entfernte Config-Pfade/Constants, obsolete Search-Marker)
3. `bin/codex-skills-sync.sh --check`
- prueft Drift zwischen Repo-Skills und `~/.codex/skills`
- prüft Drift zwischen Repo-Skills und `~/.codex/skills`
## Berichtspflicht

View File

@@ -1,6 +1,6 @@
---
name: starterkit-grid-standards
description: Standardisierungs-Skill fuer GridJS-Listen im Starterkit. Verwenden, wenn Listen neu gebaut oder refactored werden sollen (rowInteraction, pageSize, filter drawer, URL-state, accessibility).
description: Standardisierungs-Skill für GridJS-Listen im Starterkit. Verwenden, wenn Listen neu gebaut oder refactored werden sollen (rowInteraction, pageSize, filter drawer, URL-state, accessibility).
---
# Starterkit Grid Standards
@@ -18,18 +18,18 @@ GridJS-Listen projektweit einheitlich, zuganglich und wartbar halten.
## Verbindliche Regeln
1. MUST `initStandardListPage(...)` als Standard nutzen (nur begruendete Ausnahmen direkt mit `createServerGrid(...)`).
2. MUST `rowDblClick.getUrl(...)` fuer zeilenbezogene Navigation setzen, wenn Row-Navigation vorgesehen ist.
2. MUST `rowDblClick.getUrl(...)` für zeilenbezogene Navigation setzen, wenn Row-Navigation vorgesehen ist.
3. MUST globale `rowInteraction`-Defaults respektieren (Action-Spalte, Enter, Doppelklick-Fallback).
4. MUST globale `pageSize`-Standards respektieren (`10/25/50/100`, Toolbar-Placement, URL > storage > default).
5. MUST Filter-Drawer/Chips ueber den Standard-Contract nutzen, keine parallelen Custom-Patterns.
5. MUST Filter-Drawer/Chips über den Standard-Contract nutzen, keine parallelen Custom-Patterns.
6. MUST NOT pro Seite eigene Row-Action-Hacks bauen, wenn der Factory-Contract ausreicht.
## Vorgehen
1. Ist-Liste gegen `references/list-checklist.md` pruefen.
1. Ist-Liste gegen `references/list-checklist.md` prüfen.
2. Fehlende Standards zuerst zentral in der Factory loesen, danach nur minimale Seitenanpassungen.
3. UI/CSS nur als additive Erweiterung zu bestehenden Komponenten.
4. Relevante Gates und Browser-Smoke (Keyboard + Console) ausfuehren.
4. Relevante Gates und Browser-Smoke (Keyboard + Console) ausführen.
## Referenzen

View File

@@ -3,19 +3,19 @@
## Bootstrap
1. `initStandardListPage({ grid, filters, hooks })` verwendet.
2. `filterSchema` aus Server-Config uebergeben.
2. `filterSchema` aus Server-Config übergeben.
3. `urlSync` bewusst gesetzt.
## Interaction
1. `rowDblClick.getUrl(...)` liefert stabile Ziel-URL oder leer.
2. Keine Doppel-Action-Spalte (Factory auto-action vs explizite actions).
3. Enter/Pointer/Focus fuer oeffnbare Rows funktionieren.
3. Enter/Pointer/Focus für öffnbare Rows funktionieren.
## Pagination + URL
1. Page-size Optionen nur `10/25/50/100`.
2. URL Sync pruefen (`page`, `order`, `dir`, `limit`).
2. URL Sync prüfen (`page`, `order`, `dir`, `limit`).
3. Default-Werte erzeugen saubere URL.
## Filter UX
@@ -26,5 +26,5 @@
## Regression
1. Sortierung, Selection/Bulk, Doppelklick unveraendert.
1. Sortierung, Selection/Bulk, Doppelklick unverändert.
2. Keine neuen Console Errors.

View File

@@ -15,6 +15,6 @@
## Verhalten
1. Aenderung der Seitengroesse setzt Seite auf 1.
1. Änderung der Seitengroesse setzt Seite auf 1.
2. Sortierung/Filter bleiben erhalten.
3. LocalStorage-Key pro Tabelle (path + dataUrl + container).

View File

@@ -8,7 +8,7 @@ Row-Navigation discoverable und keyboard-freundlich machen.
1. Konfigurierbares Link-Column: Die primaere Datenspalte (z.B. Name, Beschreibung) wird als klickbarer `<a>`-Link gerendert.
2. Enter auf fokussierter Row loest dieselbe Navigation aus.
3. Doppelklick bleibt als Fallback fuer Power-User.
3. Doppelklick bleibt als Fallback für Power-User.
4. Nur Rows mit Ziel-URL erhalten `data-row-open-url` und den Link im Link-Column.
5. Rows ohne URL (z.B. fehlende Berechtigung) zeigen den Inhalt als Plain-Text ohne Link.
@@ -40,6 +40,6 @@ rowInteraction: {
## Guardrails
1. Keine globale Tab-Stop-Flut auf allen Rows.
2. Fokusstil fuer Row und Link-Element sichtbar.
3. Explizite `actions.enabled: true` pro Seite darf Link-Column uebersteuern (eigene Action-Spalte).
2. Fokusstil für Row und Link-Element sichtbar.
3. Explizite `actions.enabled: true` pro Seite darf Link-Column übersteuern (eigene Action-Spalte).
4. Link-Column darf keine Spalte mit verschachtelten `<a>`-Elementen umwickeln (z.B. Avatar mit Lightbox).

View File

@@ -1,24 +1,24 @@
---
name: starterkit-php-style-ci
description: Standard-Skill fuer PHP Coding-Style im Starterkit (php-cs-fixer, dry-run in CI, lokaler fix/check workflow). Verwenden bei Style-Einfuehrung, CI-Checks oder grossen Format-Diffs.
description: Standard-Skill für PHP Coding-Style im Starterkit (php-cs-fixer, dry-run in CI, lokaler fix/check workflow). Verwenden bei Style-Einführung, CI-Checks oder grossen Format-Diffs.
---
# Starterkit PHP Style CI
## Ziel
Coding-Style pruefbar, reproduzierbar und regressionsarm machen.
Coding-Style prüfbar, reproduzierbar und regressionsarm machen.
## Wann verwenden
1. Einfuehrung oder Nachschaerfung von Style-Regeln.
2. CI-Dry-Run fuer Style-Checks.
1. Einführung oder Nachschaerfung von Style-Regeln.
2. CI-Dry-Run für Style-Checks.
3. Aufraeumen grosser Style-Diff-Wellen.
## Verbindliche Regeln
1. MUST `vendor/bin/php-cs-fixer fix --config=tools/php-cs-fixer/.php-cs-fixer.dist.php --dry-run --diff --verbose` fuer nicht-mutierende Pruefung nutzen (Convenience-Alias: `composer cs:check`).
2. MUST `composer cs:fix` nur bewusst und mit Diff-Kontrolle ausfuehren.
1. MUST `vendor/bin/php-cs-fixer fix --config=tools/php-cs-fixer/.php-cs-fixer.dist.php --dry-run --diff --verbose` für nicht-mutierende Prüfung nutzen (Convenience-Alias: `composer cs:check`).
2. MUST `composer cs:fix` nur bewusst und mit Diff-Kontrolle ausführen.
3. MUST Style-Check vor Merge gruen halten (lokal und optional CI).
4. MUST nach groesseren Fixes mindestens `phpunit` und `phpstan` laufen lassen.
5. MUST NOT manuell Einzelstellen formatieren, wenn der Fixer sie zentral loesen kann.
@@ -26,8 +26,8 @@ Coding-Style pruefbar, reproduzierbar und regressionsarm machen.
## Workflow
1. Baseline erfassen: `vendor/bin/php-cs-fixer fix --config=tools/php-cs-fixer/.php-cs-fixer.dist.php --dry-run --diff --verbose`.
2. Falls noetig fixen: `composer cs:fix`.
3. Diff fokussiert pruefen (Imports, Braces, Nebenwirkungen).
2. Falls nötig fixen: `composer cs:fix`.
3. Diff fokussiert prüfen (Imports, Braces, Nebenwirkungen).
4. Qualitaetsgates laufen lassen.
5. CI-Dry-Run konfigurieren oder validieren.

View File

@@ -2,7 +2,7 @@
## Ziel
CI soll nur pruefen, nicht formatieren.
CI soll nur prüfen, nicht formatieren.
## Minimaler Check
@@ -13,7 +13,7 @@ vendor/bin/php-cs-fixer fix --config=tools/php-cs-fixer/.php-cs-fixer.dist.php -
## Erwartung
1. Exit Code 0: Style konform.
2. Exit Code != 0: Diff ausgeben, Entwickler fuehrt lokal `composer cs:fix` aus.
2. Exit Code != 0: Diff ausgeben, Entwickler führt lokal `composer cs:fix` aus.
## Hinweise

View File

@@ -11,7 +11,7 @@ composer cs:fix
1. Erst Style-Check laufen lassen (`vendor/bin/php-cs-fixer fix --config=tools/php-cs-fixer/.php-cs-fixer.dist.php --dry-run --diff --verbose`).
2. Danach `cs:fix`.
3. Nur relevante Diffs uebernehmen, grosse Misch-Diffs vermeiden.
3. Nur relevante Diffs übernehmen, grosse Misch-Diffs vermeiden.
4. Anschliessend:
```bash

View File

@@ -1,13 +1,13 @@
---
name: starterkit-planner
description: Planungs-Skill fuer Architektur-, Rollout-, Refactor- und Standardisierungsaufgaben im Starterkit. Verwenden, wenn ein decision-complete Plan mit klaren Interfaces, Tests, Risiken und Annahmen benoetigt wird.
description: Planungs-Skill für Architektur-, Rollout-, Refactor- und Standardisierungsaufgaben im Starterkit. Verwenden, wenn ein decision-complete Plan mit klaren Interfaces, Tests, Risiken und Annahmen benötigt wird.
---
# Starterkit Planner
## Ziel
Planungen so strukturieren, dass Implementierung ohne offene Entscheidungen moeglich ist.
Planungen so strukturieren, dass Implementierung ohne offene Entscheidungen möglich ist.
Bei Agent-Workflows muss der Plan maschinenlesbar in die Projekt-Contracts passen.
## Verbindliches Ausgabeformat
@@ -23,9 +23,9 @@ Bei Agent-Workflows muss der Plan maschinenlesbar in die Projekt-Contracts passe
Wenn `.agents/` verwendet wird:
1. Plan muss dem Schema `.agents/contracts/planner.schema.json` entsprechen.
2. Success Criteria muessen stabile IDs tragen (`SC-001`, `SC-002`, ...).
3. Success Criteria muessen so formuliert sein, dass Reviewer Acceptance sie direkt gegen `criterion_id` pruefen kann.
4. Guard- und Quality-Gate-IDs muessen aus den Katalogen kommen (`GR-*`, `QG-*`).
2. Success Criteria müssen stabile IDs tragen (`SC-001`, `SC-002`, ...).
3. Success Criteria müssen so formuliert sein, dass Reviewer Acceptance sie direkt gegen `criterion_id` prüfen kann.
4. Guard- und Quality-Gate-IDs müssen aus den Katalogen kommen (`GR-*`, `QG-*`).
## Vorgehen
@@ -33,7 +33,7 @@ Wenn `.agents/` verwendet wird:
2. Entscheidungen mit Tradeoffs transparent machen.
3. Oeffentliche Contracts explizit benennen.
4. Success Criteria frueh mit stabilen IDs (`SC-*`) definieren.
5. Reihenfolge und Rollout so planen, dass Rueckbau moeglich bleibt.
5. Reihenfolge und Rollout so planen, dass Rueckbau möglich bleibt.
6. Teststrategie nach Risiko priorisieren.
## Qualitaetskriterien
@@ -42,7 +42,7 @@ Wenn `.agents/` verwendet wird:
2. Jeder betroffene Bereich hat klare Akzeptanzkriterien mit stabiler ID (`SC-*`).
3. Risiken sind priorisiert und beobachtbar.
4. Ungeklaerte Themen stehen explizit unter Annahmen.
5. Guard-/Gate-Referenzen sind vollstaendig und pruefbar (`GR-*`, `QG-*`).
5. Guard-/Gate-Referenzen sind vollstaendig und prüfbar (`GR-*`, `QG-*`).
## Out of Scope

View File

@@ -19,7 +19,7 @@
### Option B: Shared Partial/Helper
- Vorteile: Schneller Nutzen, moderates Risiko
- Nachteile: Teilweise Restduplikate moeglich
- Nachteile: Teilweise Restduplikate möglich
- Geeignet wenn: Wiederkehrendes UI-/Glue-Muster mit klaren Datencontracts
### Option C: Lokal belassen