CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
5.0 KiB
5.0 KiB
API-02 – Verbindungsstatus-Übersicht & Diagnose: Prüfprotokoll
Stand: 2026-09-23, Branch feature/api-02-connect-verbindungsstatus-diagnose, geprüft auf Entwicklungshost 204 (Wegwerf-Datenbank, archivdms unberührt).
Umsetzung
- Backend:
connect/internal/syncjob.Store.ListForTenant(neu) liest alle Sync-Jobs eines Mandanten mit dem jeweils letzten Lauf in einer Abfrage (LEFT JOIN LATERAL).connect/internal/statusapiist die HTTP-Bindung (GET /connectors/status), Identität übergangsweise überX-User-Id/X-Tenant-Slug(Muster wieworkflow/internal/approvalapivor der zentralen Core-JWT-Anbindung). - Dienst:
connect/cmd/connect-appist der erste laufende HTTP-Dienst des Connect-Moduls (Port 9500, aus dem bereits reservierten Bereichdeploy/ports.tsv), gehärtete Timeouts nach demhttpharden-Muster. - Betrieb:
connect/cmd/migratewendet die Migrationen an (Gegenstück zudms/cmd/migrate). - Oberfläche:
web/connect-status(Next.js/React,@nexarch/shl-Design-System, Bearer-/Identitäts-Muster wie UX-10, Fokus- und Theme-Härtung wie in UX-07/UX-08 aufweb/mail-searchgelernt). - Test-Fixture:
connect/cmd/status-a11y-fixture— Kopie vonconnect-appmit CORS-Freigabe, genau wiedms/cmd/a11y-fixture. Der Produktionsdienstconnect-appbleibt ohne CORS (Annahme: same-origin Reverse-Proxy wie bei allen anderen Modulen).
Akzeptanzkriterien
- Verbindungsstatus je Connector auf einen Blick — erfüllt. Tabelle zeigt Status farbig hervorgehoben je Zeile.
- Letzter Sync-Lauf mit Ergebnis einsehbar — erfüllt. Zeitpunkt und Auslöser (geplant/manuell) je Zeile.
- Fehlerdiagnose zeigt Ursache aus dem Fehlerprotokoll — erfüllt.
last_erroraussync_job_runswird unverändert angezeigt.
Prüfungen
- Statusanzeige korrekt für erfolgreichen und fehlgeschlagenen Lauf — bestanden. Go-Test
TestListForTenant_ReturnsJobsWithLastRun(echte Postgres-Wegwerf-DB) und Vitestzeigt den Status für erfolgreichen und fehlgeschlagenen Lauf korrekt an. - Diagnoseansicht zeigt reale Testfehler nachvollziehbar — bestanden. Go-Test prüft
LastErrorbyteidentisch gegen den eingegebenen Fehlertext; Vitestzeigt die Fehlerursache aus dem Fehlerprotokoll; echter Browserlauf (siehe unten) zeigt den Textverbindung zu drittsystem abgelehntim gerenderten DOM. - Aktualisierung nach neuem Sync-Lauf korrekt — bestanden. Vitest
zeigt nach Klick auf Aktualisieren den neuen Status eines inzwischen abgeschlossenen Laufs(Oberfläche hat dafür eine Aktualisieren-Schaltfläche bekommen, echter erneuter Abruf, kein Caching).
Läufe auf 204
go build ./...,go vet ./...,gofmt -l .: sauber.go test -count=1 ./...(echte Postgres-Wegwerf-DB,TEST_TENANT_DSN): alle Paketeok, inkl.statusapi(neu) undsyncjob(erweitert).web/connect-status:tsc --noEmitsauber,vitest run5/5,next builderfolgreich (Routen/,/status).- Echter Browserlauf (
web/a11y-audit/connect-status-run.sh, Chrome stable, echterconnect-Dienst gegen echte Postgres-Daten, zwei synthetische Connectoren mit je einem erfolgreichen und einem fehlgeschlagenen Lauf): axe 0 Verstöße in hell und dunkel, kein horizontaler Überlauf, sichtbarer Fokusring, Tabelle mit den echten Daten gerendert (tableCount: 1, 12 Zellen = 2 Zeilen × 6 Spalten). check-port-defaults.sh,check-route-prefixes.sh: ok.- Rückbau: Ports 9590/4190 (Testlauf) sind nach Skriptende frei, kein Prozess- oder Verzeichnisrest auf 204.
QA und Entscheidungen
- Aktualisieren-Schaltfläche statt automatischem Polling: Bewusste, kleinste Lösung für Prüfung 3 — ein Intervall-Polling wäre außerhalb des Ticket-Scopes (Ticket verlangt nur, dass eine Aktualisierung korrekt ist, kein Echtzeit-Update).
- CORS nur im Test-Fixture: Der echte
connect-app-Dienst bekommt keine CORS-Freigabe, weil kein anderes Modul das für den Produktionsbetrieb tut (alle verlassen sich auf denselben Ursprung über den Reverse Proxy). Ein eigenes Fixture-Binary (Musterdms/cmd/a11y-fixture) hält diese Testbequemlichkeit vom Produktionscode fern. - Migrationswerkzeug ergänzt (
connect/cmd/migrate): War nötig, um die Migrationen überhaupt real anwenden zu können (Voraussetzung für den echten Browserlauf), ist aber auch als Betriebswerkzeug außerhalb dieses Tickets sinnvoll — analog zudms/cmd/migrate. - 4 Fix-Iterationen (von bis zu 20 erlaubten): Vitest-Reload-Test ursprünglich mit zwei parallelen Renders statt einer Aktualisieren-Schaltfläche (behoben), fehlendes
afterEach(cleanup)(SHL-01-Erfahrung, führte zu „mehrere Elemente gefunden"), fehlende@testing-library/jest-dom-Abhängigkeit, CORS-Fehler im Browserlauf (gelöst durch eigenes Test-Fixture-Binary statt Änderung am Produktionsdienst).
Nicht Teil dieser Kachel
QA-02Prüfgate Connector-Engine (folgt).- Bildschirmleser-Stichprobe: nicht durchgeführt, gleiche organisatorische Lücke wie bei UX-06/UX-07 (kein NVDA/VoiceOver auf dem Testhost).