Files
AzuTear f5552218bc
CI - Build & Test / Backend (.NET) (push) Successful in 42s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 2m46s
CI - Build & Test / Security Check (push) Successful in 3s
CI - Build & Test / Deploy Nexus (push) Successful in 56s
feat: ship agent-first mission control v0.2.57
2026-07-31 22:39:47 +02:00

149 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Nexus Seitenaudit
**Datum:** 2026-07-26
**Commit:** `3bc7622977f4a6c2f2e98ab4aa856a2e45c3cf49`
**Auditumfang:** Alle 18 in `frontend/src/router.ts` registrierten Seiten plus
ungültige Navigationsziele und sechs Viewport-Größen.
## Methodik und Evidenzgrenze
Die Anwendung wurde lokal gebaut und im Browser mit repräsentativen,
deterministischen API-Fixtures betrieben. Dadurch konnten Authentifizierung,
Routen, Inhalte, Lade-/Leerzustände, Interaktionen und Responsive-Verhalten
reproduzierbar geprüft werden.
Die Fixtures ersetzen keinen Live-Systemtest:
- keine reale PostgreSQL- oder OpenClaw-Verbindung,
- kein produktiver Nginx-/Traefik-Pfad,
- SSE absichtlich nicht als Live-Vertrag bewertet,
- fixturebedingte Datums- oder Reconnect-Anzeigen gelten nicht als
Produktdefekte.
Jeder Screenshot stammt aus diesem Auditlauf und liegt unter
[`screenshots/`](screenshots/).
## Leitbefunde
1. **Dashboard ist zwischen 375 und 1024 px nicht nutzbar.** Agent-Cards,
Header und Iris-Panel überlappen oder werden abgeschnitten.
2. **Bei 768 px greift der mobile Sidebar-Breakpoint noch nicht.** Die feste
248-px-Sidebar lässt dem Board nur einen schmalen Restbereich.
3. **Zwei UI-Shells erzeugen einen Produktbruch.** Dashboard und restliche
Seiten unterscheiden sich in Navigation, Sprache, Dichte, Tokens und
Verhalten.
4. **Vier Dashboard-Navigationsziele sind nicht registriert.** Der
Wildcard-Redirect kaschiert das Problem und zeigt wieder `/dashboard`.
5. **Daten nach Login werden nicht zuverlässig initialisiert.** Projects,
Models und Activity bleiben bis zum manuellen Refresh leer.
6. **Task Board verliert auf kleinen Displays den Gesamtüberblick.** Es zeigt
praktisch nur die erste Spalte und erzeugt große leere Höhen.
7. **Kontrast und Schriftgrößen sind zu schwach.** Das betrifft besonders
Labels, Metadaten, Buttons und sekundäre Texte.
## Visuelle Kernevidenz
### Dashboard, Desktop 1440 px
![Dashboard desktop](screenshots/02-dashboard-desktop.png)
### Dashboard, Mobile 375 px
![Dashboard mobile](screenshots/19-dashboard-mobile-375.png)
### Dashboard, Tablet 768 px
![Dashboard tablet](screenshots/23-dashboard-tablet-768.png)
### Task Board, Mobile 375 px
![Task Board mobile](screenshots/20-task-board-mobile-375.png)
## Audit pro registrierter Seite
| Route | Status | Wesentliche Befunde | Evidenz |
|---|---|---|---|
| `/login` | P1 | Visuell fokussiert, aber sehr dunkel. Bei 320×568 werden oberer Brand-Bereich und untere Inhalte nicht gemeinsam sichtbar; der Flow benötigt Scrollen. | [Desktop](screenshots/01-login-desktop.png), [320 px](screenshots/22-login-mobile-320.png) |
| `/dashboard` | P0 | Eigenständige V2-Shell; dichte, überlappende Agent-Topologie; Suche und „Ask Iris“ ohne vollständige Aktion; feste Dashboard-Aktivmarkierung. Zwischen 375 und 1024 px schwer bis vollständig unbrauchbar. | [1440](screenshots/02-dashboard-desktop.png), [375](screenshots/19-dashboard-mobile-375.png), [768](screenshots/23-dashboard-tablet-768.png), [1024](screenshots/24-dashboard-1024.png), [1920](screenshots/25-dashboard-wide-1920.png) |
| `/memory` | P2 | Kohärente List-/Detailansicht, aber sehr kleine und kontrastarme Metadaten. Der große leere Detailbereich gibt beim Einstieg wenig Orientierung. | [Desktop](screenshots/03-memory-desktop.png) |
| `/docs` | P2 | Such- und Kategorienstruktur sind verständlich. Initial bleibt viel leerer Raum; kein automatisch ausgewähltes Dokument und zu schwache Sekundärtexte. | [Desktop](screenshots/04-docs-desktop.png) |
| `/agents/:id` | P1 | Informationsarchitektur ist brauchbar. „Zurück zum Team“ navigiert jedoch zu nicht registriertem `/team` und landet über Wildcard auf dem Dashboard. | [Detail](screenshots/05-agent-detail-desktop.png), [Fehlredirect](screenshots/05b-agent-back-redirect-desktop.png) |
| `/security` | P0 | Übersicht ist visuell nachvollziehbar, vermittelt aber mehr Sicherheit als die tatsächliche Controller-Autorisierung bietet. Deaktivierte 2FA und kritische Zugriffslücken sind nicht als Release-Blocker erkennbar. | [Desktop](screenshots/06-security-desktop.png) |
| `/incidents` | P2 | Solide List-/Detailstruktur. Kleine Typografie, schwache Statusdifferenzierung und ein großer initial leerer Detailbereich bremsen den Scan. | [Desktop](screenshots/07-incidents-desktop.png) |
| `/calendar` | P2 | Termine und Zeitbezug sind gut strukturiert. Refresh und Metadaten sind visuell zu zurückhaltend. | [Desktop](screenshots/08-calendar-desktop.png) |
| `/projects` | P1 | Nach normalem Login zunächst leer. Erst manueller Refresh lädt Daten. Geladener ModuleView wirkt weitgehend ungestaltet und nicht wie Teil derselben Anwendung. | [Vor Refresh](screenshots/09-projects-desktop.png), [nach Refresh](screenshots/09b-projects-after-refresh-desktop.png) |
| `/projects/:id` | P2 | Klare Stammdaten und Task-Zuordnung. Sehr große Leerflächen; destruktive Archivaktion erhält relativ viel visuelles Gewicht. | [Desktop](screenshots/10-project-detail-desktop.png) |
| `/tasks` | P1 | Funktionsreicher Board-Flow, aber fünf Spalten überlaufen bereits auf Desktop. Auf 375 px ist nur eine Spalte plus Restkante sichtbar; keine gute mobile Statusnavigation. | [Desktop](screenshots/11-tasks-desktop.png), [375 px](screenshots/20-task-board-mobile-375.png) |
| `/tasks/:id` | P1 | Detail- und Subtask-Struktur sind brauchbar. Existierende Priorität `Critical` erscheint leer, weil die Select-Option fehlt. | [Desktop](screenshots/12-task-detail-desktop.png) |
| `/agents` | P2 | Stärkste Legacy-Übersichtsseite: konsistentes Grid und verständliche Rollen. Ganze `article`-Cards sind jedoch clickbar statt semantische Links/Buttons zu verwenden. | [Desktop](screenshots/13-agents-desktop.png) |
| `/models` | P1 | Initial leer wegen fehlender Store-Hydration. Nach Refresh inhaltlich vorhanden, aber visuell als roher ModuleView ohne klare Hierarchie. | [Vor Refresh](screenshots/14-models-desktop.png), [nach Refresh](screenshots/14b-models-after-refresh-desktop.png) |
| `/activity` | P1 | Dasselbe Hydration-Problem. Geladene Activity ist funktional lesbar, wirkt aber wie eine unvollständige Zwischenansicht. | [Vor Refresh](screenshots/15-activity-desktop.png), [nach Refresh](screenshots/15b-activity-after-refresh-desktop.png) |
| `/chat` | P1 | Kernfunktion ist erkennbar, Oberfläche wirkt jedoch unfertig: schwache Hierarchie, rohe Form-Controls und keine belastbare mobile Conversation-Struktur. | [Desktop](screenshots/16-chat-desktop.png) |
| `/notifications` | P2 | Filter und Gruppierung sind vorhanden. Kontrast ist schwach; Emoji-Icons brechen die sonstige Icon-Sprache und besitzen uneinheitliche Semantik. | [Desktop](screenshots/17-notifications-desktop.png) |
| `/settings` | P2 | Am besten gelöste responsive Legacy-Seite. Formfelder bleiben bei 375 px nutzbar. Globale Topbar-Icons und kleine Labels bleiben Accessibility-Risiken. | [Desktop](screenshots/18-settings-desktop.png), [375 px](screenshots/21-settings-mobile-375.png) |
## Nicht registrierte oder defekte Ziele
| Quelle | Ziel | Tatsächliches Verhalten |
|---|---|---|
| Dashboard-Sidebar | `/orchestration` | Wildcard -> `/dashboard` |
| Dashboard-Sidebar | `/research` | Wildcard -> `/dashboard` |
| Dashboard-Sidebar | `/hosts` | Wildcard -> `/dashboard` |
| Dashboard-Sidebar | `/costs` | Wildcard -> `/dashboard` |
| Agent Detail | `/team` | Wildcard -> `/dashboard` |
`TeamView.vue` existiert, ist aber nicht im Router registriert. Der
Wildcard-Redirect macht diese Integrationsfehler für Nutzer schwer
diagnostizierbar.
## Responsive-Matrix
| Viewport | Ergebnis |
|---|---|
| 320 px | Login scrollbar und vertikal gequetscht; kein kompakter First-Viewport-Flow |
| 375 px | Dashboard P0-defekt; Task Board nur eingeschränkt navigierbar; Settings brauchbar |
| 768 px | Schlechtester Dashboard-Zwischenzustand durch Off-by-one-Breakpoint und feste Sidebar |
| 1024 px | Dashboard weiterhin überlappend und abgeschnitten |
| 1440 px | Grundsätzlich bedienbar, aber Dashboard-Header/Cards kollidieren und Task Board läuft horizontal über |
| 1920 px | Dashboard erstmals stabiler, erzeugt jedoch übermäßig viel ungenutzten Raum |
## Accessibility-Spot-Check
Keine vollständige WCAG-Prüfung. Sichtbar und im DOM nachvollziehbar:
- zahlreiche Icon-Buttons ohne Accessible Name,
- clickbare `article`-Elemente statt Links oder Buttons,
- sehr kleine Textgrößen bis in den einstelligen Pixelbereich,
- schwache Kontraste für Text, Controls und Statusinformationen,
- horizontale Informationsarchitektur ohne gleichwertige mobile Alternative,
- Platzhalter-Controls, deren sichtbare Affordance keine Aktion auslöst.
## Priorisierte Korrekturen
### P0
1. Dashboard zwischen 375 und 1024 px neu layouten; 768-px-Grenze explizit
testen.
2. Navigation nur aus registrierten Routen erzeugen oder fehlende Seiten
bewusst implementieren.
3. Security-Seite und Release-Status an die tatsächlichen
Zugriffskontrollbefunde koppeln.
### P1
1. Eine gemeinsame Shell, Tokenbasis und Navigation für alle Seiten festlegen.
2. Operations Store direkt nach erfolgreichem Login hydratisieren.
3. Task Board mit mobiler Statusauswahl oder segmentierter Liste statt
abgeschnittener Fünf-Spalten-Fläche ausstatten.
4. `Critical` im gesamten Priority-Vertrag unterstützen.
5. Suche, Ask-Iris, Logout und Back-Navigation entweder funktionsfähig machen
oder ihre Affordance entfernen.
### P2
1. Standardgrößen und Kontrast anheben.
2. Empty-/Loading-/Error-Zustände mit klarer nächster Aktion gestalten.
3. Interaktive Cards und Icon-Buttons semantisch und keyboard-tauglich machen.
4. Projects, Models, Activity und Chat aus dem generischen ModuleView in
kohärente Produktseiten überführen.