|
47 | 47 | * URL enthält Filter-Parameter (für Deep-Linking) |
48 | 48 | * Filter-Auswahl wird in localStorage persistiert |
49 | 49 |
|
| 50 | +=== Geschäftsregeln |
| 51 | +* **BR-01-001**: Ein Anker kann mehreren Rollen zugeordnet sein. Filterung zeigt alle Anker, die mindestens eine der ausgewählten Rollen enthalten. |
| 52 | +* **BR-01-002**: Bei Auswahl von "All Roles" oder leerem Filter werden alle Anker ohne Einschränkung angezeigt. |
| 53 | + |
50 | 54 | === Fehlerszenarien |
51 | 55 | * **F1**: Keine Anker für ausgewählte Rolle → System zeigt "Keine Anker gefunden für diese Rolle" |
52 | 56 | * **F2**: Browser-localStorage nicht verfügbar → Filter wird nicht persistiert, aber funktioniert während Session |
@@ -100,6 +104,10 @@ stop |
100 | 104 | * Treemap ist interaktiv und responsive |
101 | 105 | * Kategorien sind proportional zur Anzahl ihrer Anker dargestellt |
102 | 106 |
|
| 107 | +=== Geschäftsregeln |
| 108 | +* **BR-02-001**: Kategorie-Größe in der Treemap entspricht der Anzahl der enthaltenen Anker. |
| 109 | +* **BR-02-002**: Kategorien ohne Anker (nach Filterung) werden nicht dargestellt. |
| 110 | + |
103 | 111 | === Fehlerszenarien |
104 | 112 | * **F1**: Metadata-Datei nicht gefunden → System zeigt Fehlermeldung "Kategorien können nicht geladen werden" |
105 | 113 | * **F2**: Sehr kleine Bildschirmgröße → Treemap wird zu vereinfachter Liste |
@@ -151,6 +159,11 @@ stop |
151 | 159 | * Suchergebnisse sind nach Relevanz sortiert |
152 | 160 | * URL enthält Suchquery (für Deep-Linking) |
153 | 161 |
|
| 162 | +=== Geschäftsregeln |
| 163 | +* **BR-03-001**: Suche durchsucht Anker-Namen, Proponenten, Core Concepts und Tags. Andere Felder werden nicht durchsucht. |
| 164 | +* **BR-03-002**: Suche wird debounced (min. 150ms Verzögerung) um übermäßige Anfragen zu vermeiden. |
| 165 | +* **BR-03-003**: Suchbegriffe werden auf maximal 100 Zeichen begrenzt. |
| 166 | + |
154 | 167 | === Fehlerszenarien |
155 | 168 | * **F1**: Suchindex nicht geladen → System zeigt "Suche vorübergehend nicht verfügbar" |
156 | 169 | * **F2**: Sehr lange Suchbegriffe → System limitiert auf 100 Zeichen |
@@ -249,6 +262,11 @@ stop |
249 | 262 | * Sprachpräferenz wird bei nächstem Besuch beibehalten |
250 | 263 | * `<html lang="...">` ist korrekt gesetzt |
251 | 264 |
|
| 265 | +=== Geschäftsregeln |
| 266 | +* **BR-05-001**: Unterstützte Sprachen: Englisch (EN) und Deutsch (DE). Englisch ist die Standardsprache. |
| 267 | +* **BR-05-002**: Nur UI-Texte (Navigation, Labels, Buttons, Tooltips) werden übersetzt. Anker-Inhalte bleiben in der Originalsprache. |
| 268 | +* **BR-05-003**: Fehlende Übersetzungen fallen auf Englisch zurück, niemals auf leere Strings. |
| 269 | + |
252 | 270 | === Fehlerszenarien |
253 | 271 | * **F1**: Übersetzung fehlt → System zeigt Fallback auf Englisch |
254 | 272 | * **F2**: localStorage nicht verfügbar → Sprache nur für aktuelle Session |
@@ -295,6 +313,10 @@ stop |
295 | 313 | * Theme-Präferenz wird persistiert |
296 | 314 | * Alle Komponenten (inkl. Treemap) respektieren Theme |
297 | 315 |
|
| 316 | +=== Geschäftsregeln |
| 317 | +* **BR-06-001**: Theme-Ermittlung folgt der Priorität: 1. localStorage, 2. `prefers-color-scheme`, 3. Light als Default. |
| 318 | +* **BR-06-002**: Theme-Wechsel erfolgt ohne Seiten-Reload und ohne visuelles Flackern. |
| 319 | + |
298 | 320 | === Fehlerszenarien |
299 | 321 | * **F1**: localStorage nicht verfügbar → Theme nur für Session, reagiert auf prefers-color-scheme |
300 | 322 | * **F2**: Theme-CSS nicht geladen → Fallback auf System-Theme |
@@ -362,6 +384,11 @@ stop |
362 | 384 | * Automatisches Feedback ist gepostet (bei Validation) |
363 | 385 | * Bei Approval: PR ist erstellt mit generiertem Content |
364 | 386 |
|
| 387 | +=== Geschäftsregeln |
| 388 | +* **BR-07-001**: Jeder vorgeschlagene Anker muss die vier Qualitätskriterien erfüllen: Precise, Rich, Consistent, Attributable. |
| 389 | +* **BR-07-002**: Vorschläge, die reine Instruktionen ohne konzeptuelle Tiefe sind (z.B. "TLDR", "ELI5"), werden abgelehnt. |
| 390 | +* **BR-07-003**: Duplikate bestehender Anker werden abgelehnt mit Verweis auf den existierenden Eintrag. |
| 391 | + |
365 | 392 | === Fehlerszenarien |
366 | 393 | * **F1**: GitHub Actions Workflow schlägt fehl → Issue bleibt ohne Auto-Comment, manueller Review nötig |
367 | 394 | * **F2**: Copilot API nicht verfügbar → Maintainer erstellt Entry manuell |
@@ -420,6 +447,10 @@ stop |
420 | 447 | * Issue hat passendes Label |
421 | 448 | * Contributor hat klares Feedback |
422 | 449 |
|
| 450 | +=== Geschäftsregeln |
| 451 | +* **BR-08-001**: Validierungs-Score basiert auf einer 10-Punkt-Skala. Score > 7 gilt als "validated". |
| 452 | +* **BR-08-002**: Die vier Bewertungskriterien sind: Precise, Rich, Consistent, Attributable — gleichgewichtet. |
| 453 | + |
423 | 454 | === Fehlerszenarien |
424 | 455 | * **F1**: Copilot API Timeout → Workflow posted "Validation failed, manual review required" |
425 | 456 | * **F2**: Issue-Body unlesbar → Workflow posted "Cannot parse issue, please use template" |
@@ -519,6 +550,11 @@ stop |
519 | 550 | * URL ist share-bar (kopierbar) |
520 | 551 | * State (Filter, Language) ist in URL kodiert |
521 | 552 |
|
| 553 | +=== Geschäftsregeln |
| 554 | +* **BR-10-001**: Gültige Deep-Link-Formate: `#/anchor/<anchor-id>` (Hash-basiert). |
| 555 | +* **BR-10-002**: Anker-IDs sind case-sensitive und müssen exakt mit der ID in der Anchor-Datei übereinstimmen. |
| 556 | +* **BR-10-003**: Filter- und Sprachparameter aus der URL werden beim Laden angewendet. |
| 557 | + |
522 | 558 | === Fehlerszenarien |
523 | 559 | * **F1**: Anker-ID ungültig → 404 Seite mit Suchfunktion |
524 | 560 | * **F2**: Alter Link (nach Rename) → System zeigt Redirect-Hinweis oder 301 Redirect |
|
0 commit comments