## Zusammenfassung
- P0-Fund (Fable5-Review): shl-table/shl-field* hatten keine CSS-Regeln -> baseComponentStyles in tokens.ts ergaenzt
- dms-browser und portal hatten ModuleNavShell trotz Registry-Eintrag nicht eingebunden -> nachgezogen
- Hartcodierte Hex-Farben (status-page/tenant-admin/lic-admin/audit-log) durch Tokens ersetzt, neues dangerSubtle-Token
- Hydration-Mismatch in ModuleNavShell.resolveHref (SSR vs. Client-Hostname) behoben: Hostname-Tausch jetzt erst per useEffect nach Mount
- Verschachteltes <main> in portal/app/page.tsx entfernt
## Test plan
- [x] kennzahlen-dashboard, dms-browser, portal, status-page, tenant-admin, lic-admin, audit-log einzeln auf Host 204 gebaut (next build), fehlerfrei
- [ ] Review/Merge durch Repo-Verantwortlichen
🤖 Generated with [Claude Code](https://claude.com/claude-code)
P0-Fund aus Fable5-Review: shl-table/shl-field* hatten keine CSS-Regeln
(baseComponentStyles in tokens.ts ergaenzt, ueber Shell.tsx eingebunden).
dms-browser und portal hatten ModuleNavShell trotz Registry-Eintrag nicht
eingebunden, jetzt nachgezogen. Hartcodierte Hex-Farben in status-page/
tenant-admin/lic-admin/audit-log durch Tokens ersetzt (dangerSubtle neu).
ModuleNavShell.resolveHref las window.location.hostname beim ersten
Render -> SSR/Client-Mismatch (Hydration-Fehler in React 19). Fix: Href
bleibt beim ersten Render unveraendert, Hostname-Tausch erst in
useEffect nach dem Mount. Verschachteltes <main> in portal/app/page.tsx
entfernt (Shell.tsx rendert bereits eins).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
web/portal/config/modules.json war inhaltlich identisch zu MODULE_REGISTRY
in web/shl/components/ModuleNavShell.tsx, separat gepflegt. MODULE_REGISTRY
ist jetzt die einzige Quelle (description/permission als optionale Felder
ergaenzt), web/portal/lib/modules.ts importiert von @nexarch/shl statt der
JSON-Kopie. modules.json geloescht.
Nebenbefund beim Build-Test: @nexarch/shl wurde fuer web/portal per Symlink
statt Kopie installiert, Turbopack konnte den Import dadurch nicht aufloesen
("Module not found"). Fix: npm install --install-links erzwingt eine echte
Kopie wie bei den anderen Modulen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Zusammenfassung
Test plan
🤖 Generated with Claude Code
web/portal/config/modules.json war inhaltlich identisch zu MODULE_REGISTRY in web/shl/components/ModuleNavShell.tsx, separat gepflegt. MODULE_REGISTRY ist jetzt die einzige Quelle (description/permission als optionale Felder ergaenzt), web/portal/lib/modules.ts importiert von @nexarch/shl statt der JSON-Kopie. modules.json geloescht. Nebenbefund beim Build-Test: @nexarch/shl wurde fuer web/portal per Symlink statt Kopie installiert, Turbopack konnte den Import dadurch nicht aufloesen ("Module not found"). Fix: npm install --install-links erzwingt eine echte Kopie wie bei den anderen Modulen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>Bereits direkt per merge_all_prs.sh in main gemergt und gepusht. Schliesse PR, da Gitea den direkten Push nicht automatisch als Merge erkennt.
Pull request closed