Compare commits

..
Author SHA1 Message Date
simandClaude Sonnet 5.5 0e625c5381 ai-app: Test an unkritische Stelle (Konflikt mit Nachbar-PRs vermeiden)
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Waiting to run
CI / Core-Modul (Build/Vet/Test) (push) Waiting to run
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Waiting to run
CI / Web (shl) (push) Waiting to run
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Waiting to run
CI / Core-Modul (Build/Vet/Test) (pull_request) Waiting to run
CI / Web (pdf-viewer) (push) Waiting to run
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Blocked by required conditions
DB-Integrationstests / db-tests (pull_request) Waiting to run
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Waiting to run
CI / Web (dms-browser) (push) Waiting to run
AI-Pflichttest-Gate / pflichttest-gate (pull_request) Waiting to run
CI / Web (shl) (pull_request) Waiting to run
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Waiting to run
Supply-Chain-Scan (npm) / npm-audit (pull_request) Waiting to run
Supply-Chain-Scan (Go) / govulncheck (push) Waiting to run
CI / Web (pdf-viewer) (pull_request) Waiting to run
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Waiting to run
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Waiting to run
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Waiting to run
Supply-Chain-Scan (Go) / govulncheck (pull_request) Waiting to run
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Waiting to run
CI / Web (dms-browser) (pull_request) Waiting to run
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 23:28:41 +01:00
simandClaude Sonnet 5.5 0ef867daba ai-app: serverWriteTimeout vor main() (vermeidet Konflikt mit Nachbar-PRs)
CI / Core-Modul (Build/Vet/Test) (push) Waiting to run
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Waiting to run
Supply-Chain-Scan (Go) / govulncheck (push) Waiting to run
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Waiting to run
CI / Web (dms-browser) (push) Waiting to run
CI / Web (shl) (push) Waiting to run
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Waiting to run
CI / Web (pdf-viewer) (push) Waiting to run
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 23:25:40 +01:00
simandClaude Sonnet 5.5 e659fdaa59 ai-app: WriteTimeout ueber dem Provider-Timeout
CI / Web (shl) (push) Waiting to run
CI / Web (pdf-viewer) (push) Waiting to run
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Waiting to run
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (dms-browser) (push) Waiting to run
Supply-Chain-Scan (Go) / govulncheck (push) Waiting to run
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Waiting to run
CI / Core-Modul (Build/Vet/Test) (push) Waiting to run
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Waiting to run
Der Server kappte Antworten nach 15s, Inferenzaufrufe (Ollama bis 120s)
liefen dadurch ins Leere. Real gefunden bei /suggest/title und
/suggest/correspondent mit gemma4:26b (leere Antwort, curl-Code 000).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 23:22:53 +01:00
patrick 998aaf964c Merge pull request 'connect: DATEV-Export in connect-app registrieren' (#429) from feat/connect-datev-registrieren into main
CI / Core-Modul (Build/Vet/Test) (push) Successful in 38s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Web (pdf-viewer) (push) Failing after 40s
CI / Web (dms-browser) (push) Failing after 54s
CI / Web (shl) (push) Failing after 8s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 43s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Failing after 29s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
2026-10-30 00:24:20 +01:00
patrickandClaude Sonnet 5.5 976878136f Merge main in feat/connect-datev-registrieren
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 19m25s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 2s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 44s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 44s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 14s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 44s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / Web (dms-browser) (pull_request) Failing after 55s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 19m26s
CI / Web (shl) (push) Failing after 9s
CI / Web (pdf-viewer) (push) Failing after 37s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 2s
CI / Web (shl) (pull_request) Failing after 8s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
CI / Web (dms-browser) (push) Failing after 1m1s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Failing after 41s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 46s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 18m53s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m20s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-30 00:24:14 +01:00
patrick dc8f6476ab Merge pull request 'connect/statusapi: Rolle aus dem Token an die Policy' (#428) from fix/statusapi-rolle into main
CI / Web (shl) (push) Failing after 9s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 50s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 50s
CI / Web (dms-browser) (push) Failing after 1m1s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 49s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
2026-10-30 00:23:50 +01:00
patrick bc95515d98 Merge pull request 'workflow, connect: bearerauth aus common' (#427) from refactor/bearerauth-common into main
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
common Versions-Tag / tag (push) Successful in 19m12s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 15s
CI / Web (dms-browser) (push) Failing after 52s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Web (pdf-viewer) (push) Failing after 35s
CI / Web (shl) (push) Failing after 7s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 42s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 42s
2026-10-30 00:23:48 +01:00
patrickandClaude Sonnet 5.5 753af35888 connect: DATEV-Export in connect-app registriert, mit Rechtepruefung
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 51s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 14s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 18m46s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 18m59s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 42s
CI / Web (dms-browser) (pull_request) Failing after 58s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 15s
CI / Web (shl) (pull_request) Failing after 9s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 43s
CI / Web (pdf-viewer) (pull_request) Failing after 43s
CI / Web (pdf-viewer) (push) Failing after 36s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 18m38s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 2s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Web (shl) (push) Failing after 7s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 46s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 39s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m16s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 3s
/datev/exports braucht connect.datev.write (POST) bzw. connect.datev.read
(GET) mit der Rolle aus X-User-Role. Registriert nur mit
NEXARCH_CONNECT_APP_ARCHIVE_URL; die DATEV-Uebertragung bleibt aus.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-30 00:23:17 +01:00
patrickandClaude Sonnet 5.5 422e96cc20 connect/statusapi: Rolle aus X-User-Role an die Policy
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 2s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 18m56s
CI / Web (pdf-viewer) (push) Failing after 40s
CI / Web (pdf-viewer) (pull_request) Failing after 38s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 41s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 42s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 36s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Failing after 29s
CI / Web (dms-browser) (push) Failing after 57s
CI / Web (dms-browser) (pull_request) Failing after 50s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 40s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web (shl) (push) Failing after 8s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 18m52s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 5s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m17s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 18m24s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (shl) (pull_request) Failing after 9s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 2s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 14s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
Bisher fragte statusapi mit fester Rolle user. bearerauth setzt X-User-Role
aus dem Token; ohne Header bleibt es bei user.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 23:42:16 +01:00
patrickandClaude Sonnet 5.5 df9581cf45 workflow, connect: bearerauth aus common/bearerauth
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Failing after 29s
CI / Web (dms-browser) (push) Failing after 52s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 18m45s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 38s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 39s
CI / Web (dms-browser) (pull_request) Failing after 55s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 38s
CI / Web (shl) (push) Failing after 8s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 18m28s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 4s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m13s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 2s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 2s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
common Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 19m7s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 18m16s
Workflow-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 18m10s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 12s
CI / Web (pdf-viewer) (pull_request) Failing after 39s
CI / Web (shl) (pull_request) Failing after 7s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 14s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m1s
CI / Web (pdf-viewer) (push) Failing after 37s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 2s
Die beiden gleichen Kopien entfallen; common v0.2.2. Das Testpflicht-Muster
fuer bearerauth wandert vom workflow-Gate in das common-Gate.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 23:41:06 +01:00
patrick 1da0985ee9 Merge pull request 'docs: Arbeitskarten Portal-Betrieb 131' (#425) from docs/arbeitskarten-131 into main
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Failing after 29s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 13s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 39s
CI / Web (dms-browser) (push) Failing after 51s
CI / Web (pdf-viewer) (push) Failing after 39s
CI / Web (shl) (push) Failing after 7s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
2026-10-29 15:48:44 +01:00
patrick 550b8fad37 Merge pull request 'common: bearerauth aus workflow und connect' (#426) from feat/common-bearerauth into main
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
common Versions-Tag / tag (push) Successful in 17m49s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m1s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 25s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web (pdf-viewer) (push) Failing after 49s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Web (dms-browser) (push) Failing after 1m25s
CI / Web (shl) (push) Failing after 7s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 49s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
2026-10-29 15:48:42 +01:00
patrickandClaude Sonnet 5.5 fb191e6a7e common: bearerauth aus workflow und connect
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
common Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
Beide Module halten dieselbe Middleware (nur der Kommentar unterscheidet
sich). Hier liegt die gemeinsame Fassung; workflow und connect stellen
nach dem Tag in einem Folge-PR um.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 15:41:41 +01:00
patrickandClaude Sonnet 5.5 8db62327dc docs: Arbeitskarten D-02, D-03 aktualisiert, D-08 und D-09 ergaenzt
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 15:37:03 +01:00
patrick 52a6a4bfd7 Merge pull request 'deploy: Skript zum Einrichten des Portals auf 131' (#424) from feat/skript-131-portal into main
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 19s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m5s
CI / Web (dms-browser) (push) Failing after 1m27s
CI / Web (shl) (push) Failing after 12s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Web (pdf-viewer) (push) Failing after 1m5s
2026-10-29 11:17:23 +01:00
patrickandClaude Sonnet 5.5 d7172a1699 deploy: npm ci bei abweichender Lockdatei, shl nutzt node_modules der App
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) 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 / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) 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
CI / Web (dms-browser) (push) Canceled after 0s
Account auf 131 hat Next 14.2.35, die Quelle braucht 16.3.5 (--webpack
unbekannt). Abhaengigkeiten werden jetzt per Lockdatei-Hash erneuert,
shl/node_modules wird auf die der App verlinkt (eine React-Instanz).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 10:58:13 +01:00
patrickandClaude Sonnet 5.5 154f3fc505 deploy: shl bekommt node_modules-Link, sonst findet der Portal-Build react nicht
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
Auf 131 hat /opt/nexarch-web/portal/web/shl kein node_modules; der rsync
laesst node_modules aus. Typpruefung scheiterte mit TS2307 'react'.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 10:55:30 +01:00
patrickandClaude Sonnet 5.5 638150450d deploy: Skript zum Einrichten des Portals auf 131
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (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
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) 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
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
Env-Datei, Unit, nginx-Block 8450, nft-Regel, Audience portal, CORS am Core
und Neubau von Portal und Login in einem idempotenten Lauf mit Sicherungen.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 00:00:29 +01:00
patrick 21e2e34940 Merge pull request 'portal: Betriebszustand an den Modul-Kacheln' (#423) from feat/portal-kachel-status into main
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Web (shl) (push) Failing after 11s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 21s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web (dms-browser) (push) Failing after 1m29s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 1m4s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m11s
2026-10-28 23:57:41 +01:00
patrickandClaude Sonnet 5.5 63dc5c5a6f portal: Betriebszustand an den Modul-Kacheln
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Die Kachel zeigt Punkt und Text, wenn die Statusseite ein Pruefziel kennt,
dessen Name dem Modul-Schluessel oder der Bezeichnung entspricht. Ohne
Berechtigung (403) oder ohne Statusquelle bleibt die Kachel unveraendert.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 23:56:02 +01:00
patrick 44c0919724 Merge pull request 'account: nach der Anmeldung direkt ins Portal' (#422) from feat/login-zum-portal into main
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 18s
CI / Web (pdf-viewer) (push) Failing after 1m3s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Web (shl) (push) Failing after 14s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / Web (dms-browser) (push) Failing after 1m23s
2026-10-28 23:49:57 +01:00
patrickandClaude Sonnet 5.5 e5e5a5a4ed account: nach der Anmeldung direkt ins Portal, gueltige Sitzung ueberspringt das Formular
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
NEXT_PUBLIC_PORTAL_URL ist das Ziel (ohne Wert wie bisher /profile). Das
Profil bekommt einen Link zum Portal.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 23:47:00 +01:00
patrick 303c5cfcae Merge pull request 'docs: Arbeitskarten D-05 und D-07' (#421) from docs/arbeitskarten-d07 into main
CI / Web (dms-browser) (push) Failing after 1m26s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m10s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 6s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 24s
CI / Web (pdf-viewer) (push) Failing after 1m1s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 6s
CI / Web (shl) (push) Failing after 13s
2026-10-28 23:31:55 +01:00
patrickandClaude Sonnet 5.5 81ecfe8d86 docs: Arbeitskarten D-05 aktualisiert, D-07 (Issue 369) neu
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 23:30:54 +01:00
patrick 9bb138166d Merge pull request 'connect: Bearer-Pruefung in connect-app und Frontends' (#419) from feat/connect-bearer into main
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m6s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m12s
CI / Web (dms-browser) (push) Failing after 1m26s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 6s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 20s
CI / Web (pdf-viewer) (push) Failing after 1m1s
CI / Web (shl) (push) Failing after 15s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
2026-10-28 23:30:24 +01:00
patrickandClaude Sonnet 5.5 1de1da433f Merge main in feat/connect-bearer
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 26m10s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m0s
CI / Web (shl) (push) Failing after 17s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 26m46s
CI / Web (pdf-viewer) (pull_request) Failing after 1m6s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
CI / Web (shl) (pull_request) Failing after 11s
CI / Web (pdf-viewer) (push) Failing after 1m13s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 1m3s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m51s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 18s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 28s
CI / Web (dms-browser) (pull_request) Failing after 1m38s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / Web (dms-browser) (push) Failing after 1m27s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 25m41s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 51s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 23:30:01 +01:00
patrick 1b095507f3 Merge pull request 'RBAC #369: Rolle aus dem Token, Policy-Pruefung fail-closed' (#420) from fix/rbac-role-failclosed into main
CI / Web (pdf-viewer) (push) Failing after 1m3s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m7s
CI / Web (shl) (push) Failing after 12s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 1m26s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 55s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 24s
2026-10-28 23:29:22 +01:00
patrick a2832c5b53 Merge pull request 'SEC: RBAC-Pruefung in ai-search, workflow-tasks, connect-setup (#369)' (#418) from fix/issue-369-rbac into main
CI / Web (shl) (push) Failing after 16s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m6s
CI / Web (pdf-viewer) (push) Failing after 1m0s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m17s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web (dms-browser) (push) Failing after 1m27s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 20s
2026-10-28 23:29:04 +01:00
patrick 87bed4d213 Merge pull request 'shl: gemeinsamer Bearer-Helfer fuer Frontends' (#417) from refactor/shl-bearer into main
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Web (pdf-viewer) (push) Failing after 1m4s
CI / Web (shl) (push) Failing after 13s
CI / Web (dms-browser) (push) Failing after 1m22s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 26s
2026-10-28 23:29:02 +01:00
patrickandClaude Sonnet 5.5 bfbb375649 connect bearerauth: X-User-Role nur aus dem Token
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m16s
CI / Web (pdf-viewer) (push) Failing after 1m3s
CI / Web (pdf-viewer) (pull_request) Failing after 59s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m51s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 25m50s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 21s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 22s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 1m4s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 24m33s
CI / Web (dms-browser) (pull_request) Failing after 1m39s
CI / Web (shl) (push) Failing after 11s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 1m27s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (shl) (pull_request) Failing after 12s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 52s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 24m39s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m1s
Gleiche Aenderung wie workflow/internal/bearerauth, damit die Rechtepruefung
aus #418 die echte Rolle bekommt.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 23:09:17 +01:00
patrickandClaude Sonnet 5.5 698f0490f2 RBAC #369: Rolle aus dem Token durchreichen, Policy-Pruefung fail-closed
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 5s
CI / Web (shl) (pull_request) Failing after 13s
Workflow-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 24m45s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m52s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 21s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 25s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 1m2s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 24m26s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m2s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web (shl) (push) Failing after 16s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m6s
CI / Web (pdf-viewer) (push) Failing after 1m2s
CI / Web (pdf-viewer) (pull_request) Failing after 55s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 24m43s
AI-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 24m42s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 1m23s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 1m0s
CI / Web (dms-browser) (pull_request) Failing after 1m32s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 25m10s
workflow bearerauth setzt X-User-Role nur aus den Claims (Client-Header werden
entfernt); taskapi und connectorsetupapi fragen mit dieser Rolle, Default user.
Migration 0029: connect.setup.write nur fuer tenant_admin.
ai-app, workflow-app, connect-app starten ohne POLICY_URL nicht mehr, ausser
mit NEXARCH_<MODUL>_APP_POLICY_DISABLED=1.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 23:08:57 +01:00
patrickandClaude Sonnet 5.5 3f83038203 connect: Bearer-Pruefung in connect-app, Frontends connect-*, datev-export, dms2-import per Sitzung
CI / Web (shl) (push) Failing after 8s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 40s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 22m20s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m54s
CI / Web (dms-browser) (pull_request) Failing after 55s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 2s
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
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 16s
CI / Web (pdf-viewer) (pull_request) Failing after 38s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 2s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
CI / Web (dms-browser) (push) Failing after 49s
CI / Web (pdf-viewer) (push) Failing after 37s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web (shl) (pull_request) Failing after 8s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 42s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 41s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 1m3s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 23m46s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 23m56s
connect/internal/bearerauth (wie workflow): verifiziertes Core-Token setzt
X-User-Id/X-Tenant-Slug, ohne Token nur mit NEXARCH_CONNECT_APP_ALLOW_HEADER_AUTH=1.
Mit JWKS ist NEXARCH_CONNECT_APP_TENANT_SLUG Pflicht (Mandant der Datenbank).
common auf v0.2.1 (moduleauth). Frontends nutzen createBearerClient("connect").

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 22:44:50 +01:00
patrickandClaude Sonnet 5.5 0a4c0aaf92 SEC: RBAC-Pruefung in ai-search, workflow-tasks, connect-setup (#369)
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 37s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 13s
AI-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 15m54s
Workflow-Pflichttest-Gate / pflichttest-gate (pull_request) Failing after 22m6s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 38s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 15m49s
CI / Web (pdf-viewer) (push) Failing after 38s
CI / Web (pdf-viewer) (pull_request) Failing after 38s
CI / Web (shl) (pull_request) Failing after 8s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 16m2s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 37s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 2s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 16m18s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 56s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 2s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 53s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Failing after 53s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
CI / Web (shl) (push) Failing after 8s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m13s
- semanticsearchapi: ai.search.read per policyclient (WithPolicy), Tenant aus
  dem Anfragekoerper, nach Service-Token-Pruefung
- taskapi: workflow.task.read (GET /tasks) und workflow.task.write (PATCH
  status); Paket jetzt in cmd/workflow-app verdrahtet (lag bisher nur im
  a11y-Fixture) und damit hinter bearerauth
- connectorsetupapi: connect.setup.read/write je Route
- Migration 0029 (up/down): neue Rechte fuer user und tenant_admin
- Wiring: NEXARCH_{AI,WORKFLOW,CONNECT}_APP_POLICY_URL/_POLICY_SERVICE_TOKEN;
  ohne URL Warnung und keine Pruefung (Uebergang), URL ohne Token Startfehler;
  connect-app setzt die bestehende statusapi-Pruefung damit ebenfalls scharf
- Tests je API: 403 bei Ablehnung, 200 bei Freigabe, 503 bei Ausfall, Policy
  wird ohne Identitaet/Service-Token nicht befragt
- MODULE_REGISTRY: ai_search_chat, workflow_tasks, connect_setup (+ Icons,
  Portal-Rechteliste)
- Doku: BETRIEB-PORTAL.md, ENG-11 Umgebungsvariablen

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 22:36:43 +01:00
patrickandClaude Sonnet 5.5 e2d941287f shl: createBearerClient und bearerHeader statt vier kopierter http/forward-Dateien
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / Web (shl) (push) Failing after 8s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 36s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 13s
CI / Web (dms-browser) (pull_request) Failing after 47s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 15m45s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 40s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 12s
CI / Web (shl) (pull_request) Failing after 9s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 3s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 51s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 15m39s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 53s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m16s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 2s
CI / Web (pdf-viewer) (push) Failing after 40s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Failing after 40s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 15m22s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
workflow-approvals, workflow-tasks, workflow-cases und routing-rules hatten
identische lib/http.ts und lib/forward.ts; mail-search eine fuenfte Variante.
Verhalten unveraendert.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 22:22:37 +01:00
patrick ddda4b93a7 Merge pull request 'mail-search: Akte-Kontext per Bearer' (#416) from feat/mailsearch-bearer into main
CI / Web (dms-browser) (push) Failing after 48s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 38s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 2s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 39s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 13s
CI / Web (shl) (push) Failing after 8s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 2s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 5s
2026-10-28 22:16:00 +01:00
patrick 237403e27d Merge pull request 'workflow: Pflichttest-Gate fuer bearerauth' (#415) from feat/workflow-gate-bearerauth into main
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 51s
CI / Web (dms-browser) (push) Failing after 54s
CI / Web (shl) (push) Failing after 8s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 4s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 38s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 2s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
CI / Web (pdf-viewer) (push) Failing after 39s
2026-10-28 22:15:58 +01:00
patrickandClaude Sonnet 5.5 db11334b21 mail-search: Akte-Kontext per Bearer (Audience workflow)
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 36s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 3s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m20s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 2s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
CI / Web (dms-browser) (push) Failing after 59s
CI / Web (pdf-viewer) (pull_request) Failing after 35s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 16m5s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 14m57s
CI / Web (pdf-viewer) (push) Failing after 42s
CI / Web (shl) (pull_request) Failing after 7s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 16m44s
CI / Web (shl) (push) Failing after 8s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 39s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 12s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 48s
CI / Web (dms-browser) (pull_request) Failing after 49s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
Die BFF-Route reicht mit Bearer nur das Token weiter; user/tenant aus der
URL gelten nur noch ohne Token. Der Client sendet das Token ueber eine
zweite Sitzung (module workflow), sobald NEXT_PUBLIC_CORE_API_BASE gesetzt ist.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 22:07:18 +01:00
patrickandClaude Sonnet 5.5 9bfe2e891b workflow: Pflichttest-Gate deckt internal/bearerauth ab
CI / Web (shl) (pull_request) Failing after 8s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 50s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 51s
CI / Web (pdf-viewer) (push) Failing after 38s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 14m55s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 12s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 13s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Failing after 28s
Workflow-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 14m49s
CI / Web (pdf-viewer) (pull_request) Failing after 39s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 14m44s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 14m59s
CI / Web (shl) (push) Failing after 7s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 36s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m12s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 39s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 2s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
CI / Web (dms-browser) (pull_request) Failing after 55s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 27s
Aenderungen an bearerauth (Durchsetzungspunkt fuer Bearer-Token der Frontends)
brauchen jetzt eine begleitende _test.go im selben Package.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 17:33:10 +01:00
patrick 57b3e2125e Merge pull request 'docs: Workflow-Demo und Bearer-Betrieb auf 204' (#414) from docs/betrieb-demo-bearer into main
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 39s
CI / Web (dms-browser) (push) Failing after 54s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 2s
CI / Web (shl) (push) Failing after 7s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 13s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 4s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 36s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 2s
2026-10-28 17:32:27 +01:00
patrickandClaude Sonnet 5.5 dbf0877789 docs: Workflow-Demo und Bearer-Betrieb auf 204
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 40s
CI / Web (pdf-viewer) (push) Failing after 40s
CI / Web (pdf-viewer) (pull_request) Failing after 37s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 2s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 12s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 14m20s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 5s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 37s
CI / Web (dms-browser) (push) Failing after 49s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 46s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 2s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m8s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 14m28s
CI / Web (shl) (push) Failing after 9s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 14m20s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 13s
CI / Web (dms-browser) (pull_request) Failing after 49s
CI / Web (shl) (pull_request) Failing after 8s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 16:12:40 +01:00
patrick 701fb4e2c4 Merge pull request 'web: Modul-Tokens mit explizitem Zielmodul (NEXT_PUBLIC_TOKEN_MODULE)' (#413) from feat/frontends-token-module into main
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
CI / Web (pdf-viewer) (push) Failing after 36s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 40s
CI / Web (dms-browser) (push) Failing after 52s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web (shl) (push) Failing after 7s
2026-10-28 16:05:23 +01:00
patrickandClaude Sonnet 5.5 c5474111f9 web: Modul-Tokens mit explizitem Zielmodul anfordern (NEXT_PUBLIC_TOKEN_MODULE, Standard dms)
CI / Web (dms-browser) (push) Failing after 52s
CI / Web (pdf-viewer) (push) Failing after 35s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 40s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web (shl) (pull_request) Failing after 8s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 3s
CI / Web (pdf-viewer) (pull_request) Failing after 40s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 12s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 2s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 14m22s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 14m26s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (shl) (push) Failing after 8s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 14m2s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 37s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 13s
CI / Web (dms-browser) (pull_request) Failing after 48s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 49s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m15s
Vorbereitung auf mehrere NEXARCH_ACCOUNT_MODULE_AUDIENCES: der Core lehnt
Token-Anfragen ohne ?module ab, sobald mehr als eine Audience konfiguriert ist.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 15:59:16 +01:00
patrick 21838e87d0 Merge pull request 'Frontends auf Bearer: Portal-BFF, workflow-approvals, workflow-tasks' (#412) from feat/frontends-bearer into main
CI / Web (dms-browser) (push) Failing after 49s
CI / Web (pdf-viewer) (push) Failing after 38s
CI / Web (shl) (push) Failing after 9s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 36s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 12s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 2s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
2026-10-28 15:05:38 +01:00
patrickandClaude Sonnet 5.5 77b46945f2 workflow-cases, routing-rules: Sitzung und Bearer statt X-User-Id aus der URL
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 13m50s
CI / Web (dms-browser) (push) Failing after 54s
CI / Web (shl) (push) Failing after 8s
CI / Web (pdf-viewer) (push) Failing after 37s
CI / Web (dms-browser) (pull_request) Failing after 47s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 2s
CI / Web (pdf-viewer) (pull_request) Failing after 36s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 47s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 2s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 13m33s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 13m40s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 12s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 36s
CI / Web (shl) (pull_request) Failing after 7s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 40s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m19s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 15:05:34 +01:00
patrickandClaude Sonnet 5.5 0032aa7d81 workflow-approvals, workflow-tasks: Sitzung und Bearer statt X-User-Id aus der URL
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
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Failing after 56s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 13m30s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 46s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 13s
CI / Web (pdf-viewer) (pull_request) Failing after 47s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 12s
CI / Web (pdf-viewer) (push) Failing after 35s
CI / Web (shl) (pull_request) Failing after 8s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 13m41s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 2s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m15s
CI / Web (shl) (push) Failing after 7s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 37s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 39s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 2s
CI / Web (dms-browser) (push) Failing after 49s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 13m36s
Mit NEXT_PUBLIC_CORE_API_BASE holen die Frontends ein workflow-Token ueber die
Sitzung und senden Authorization; die BFF-Routen reichen es weiter und ignorieren
userId/tenant aus der URL. Ohne die Variable bleibt der Uebergangsweg.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 15:02:14 +01:00
patrickandClaude Sonnet 5.5 07b4ccbda5 portal: Workflow-Aufruf per Bearer (X-Workflow-Token), X-User-Id nur noch als Uebergang
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 14:59:43 +01:00
patrick 92dd8d33ca Merge pull request 'docs/deploy: Portal-Betrieb 131/204 aufnehmen' (#411) from docs/betrieb-portal into main
CI / Web (pdf-viewer) (push) Failing after 37s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Web (shl) (push) Failing after 8s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 40s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / Web (dms-browser) (push) Failing after 52s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 13s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
2026-10-28 14:55:50 +01:00
patrickandClaude Sonnet 5.5 6da280f91d docs/deploy: Portal-Betrieb 131/204, Unit-Vorlage, nginx-Proxy fuer 204
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web (pdf-viewer) (push) Failing after 38s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 13m6s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 13m12s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 41s
CI / Web (dms-browser) (push) Failing after 53s
CI / Web (shl) (push) Failing after 8s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 13m24s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 42s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 12s
CI / Web (shl) (pull_request) Failing after 8s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 45s
CI / Web (pdf-viewer) (pull_request) Failing after 35s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
CI / Web (dms-browser) (pull_request) Failing after 49s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m12s
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.5 <noreply@anthropic.com>
2026-10-28 14:53:31 +01:00
patrick a16d8cef66 Merge pull request 'account-api: DB-Start mit Backoff, Fehlerklassifizierung, Restart-Limits' (#410) from fix/account-api-start into main
CI / Web (shl) (push) Failing after 8s
CI / Web (dms-browser) (push) Failing after 57s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 13s
CI / Web (pdf-viewer) (push) Failing after 35s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 2s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 30s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 40s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
2026-10-28 14:52:59 +01:00
patrick 6d3a4f8e56 Merge pull request 'Portal: moderne Oberflaeche - Kacheln mit Icons, Favoriten, Befehlsleiste, Zustaende' (#409) from feat/portal-ui-1 into main
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Web (pdf-viewer) (push) Failing after 38s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 38s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web (dms-browser) (push) Failing after 51s
CI / Web (shl) (push) Failing after 8s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
2026-10-28 14:52:56 +01:00
patrickandClaude Sonnet 5.5 e428de553d account-api: DB-Start mit Backoff und Fehlerklassifizierung, systemd-Restart-Limits
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 3s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web (shl) (push) Failing after 7s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 13s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m21s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 13m17s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m15s
CI / Web (pdf-viewer) (push) Failing after 38s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 53s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 37s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 13m17s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Failing after 39s
CI / Web (shl) (pull_request) Failing after 7s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 2s
CI / Web (dms-browser) (push) Failing after 53s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 39s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 14s
CI / Web (dms-browser) (pull_request) Failing after 49s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 12m42s
Dauerhafte Fehler (28P01, 28000, 3D000) beenden mit Exit 2 und klarer Meldung,
transiente Fehler werden bis NEXARCH_ACCOUNT_DB_STARTUP_TIMEOUT_SECONDS wiederholt.
Unit-Template: RestartSec, StartLimit, RestartPreventExitStatus=2.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 14:22:40 +01:00
patrickandClaude Sonnet 5.5 142d213178 portal: Befehlsleiste (Strg+K) mit Modulsprung und Dokumentsuche, Texte DE/EN, README
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Failing after 1m2s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 20m57s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 15m11s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 20s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m37s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
CI / Web (shl) (pull_request) Failing after 11s
CI / Web (dms-browser) (pull_request) Failing after 1m31s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 25s
CI / Web (pdf-viewer) (push) Failing after 1m19s
CI / Web (shl) (push) Failing after 14s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 4s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 14m31s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 2m3s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 6s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 1m1s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m28s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 12m53s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 12:32:12 +01:00
patrickandClaude Sonnet 5.5 2d582c5b08 portal: Favoriten, Zuletzt benutzt, einklappbare Gruppen, Reihenfolge nach Modulzahl
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 12:29:23 +01:00
patrickandClaude Sonnet 5.5 50b55a2c81 portal: visuelle Basis (Kacheln, Icons, Skeleton, Fehlerkarte), Tokens und Skip-Link-CSS in shl
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 12:26:57 +01:00
patrick e5b37b6278 Merge pull request 'workflow: Bearer-Token statt freier X-User-Id (B-06)' (#408) from feat/workflow-bearer into main
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 20s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web (dms-browser) (push) Failing after 1m23s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 56s
CI / Web (pdf-viewer) (push) Failing after 1m7s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 58s
CI / Web (shl) (push) Failing after 11s
2026-10-28 12:16:35 +01:00
patrick ae9dca26b0 Merge pull request 'mail: moduleauth aus common v0.2.1' (#407) from refactor/mail-moduleauth into main
CI / Web (dms-browser) (push) Failing after 1m21s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 57s
CI / Web (shl) (push) Failing after 12s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
Mail-Schnittstellen-Vertragstests / contract-tests (push) Successful in 17m40s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 22s
CI / Web (pdf-viewer) (push) Failing after 48s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m0s
2026-10-28 12:16:29 +01:00
patrickandClaude Sonnet 5.5 0d07b79b04 workflow: Bearer-Token-Pruefung vor den APIs (Uebergangsschalter fuer X-User-Id)
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 17m44s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 2s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Web (pdf-viewer) (push) Failing after 1m6s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Failing after 33s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 16m39s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m19s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 20s
CI / Web (pdf-viewer) (pull_request) Failing after 56s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 21s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 5s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 1m6s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 5s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 17m11s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 59s
CI / Web (dms-browser) (pull_request) Failing after 1m27s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 1m2s
CI / Web (dms-browser) (push) Failing after 1m25s
CI / Web (shl) (push) Failing after 11s
CI / Web (shl) (pull_request) Failing after 14s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m45s
Workflow-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 17m29s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:38:57 +01:00
patrickandClaude Sonnet 5.5 8b9d0f8316 mail: moduleauth aus common v0.2.1
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Core-Modul (Build/Vet/Test) (pull_request) Successful in 1m0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m43s
CI / Web (dms-browser) (push) Failing after 1m20s
CI / Web (dms-browser) (pull_request) Failing after 1m14s
CI / Web (pdf-viewer) (pull_request) Failing after 57s
Mail-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 16m43s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 17m22s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 25s
CI / Web (shl) (pull_request) Failing after 12s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 2s
CI / Web (pdf-viewer) (push) Failing after 59s
Mail-Schnittstellen-Vertragstests / contract-tests (push) Successful in 17m7s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 22s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 56s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 56s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
Mail-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 16m53s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (shl) (push) Failing after 11s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 6s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m1s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 5m49s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 17m20s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:37:35 +01:00
patrick a9e2cfc29a Merge pull request 'workflow: migrate aus common v0.2.0' (#406) from refactor/workflow-migrate into main
CI / Web (dms-browser) (push) Failing after 1m21s
CI / Web (pdf-viewer) (push) Failing after 56s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 1s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 23s
CI / Web (shl) (push) Failing after 12s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m5s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 53s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
2026-10-28 11:34:05 +01:00
patrick c830edcede Merge pull request 'ai: migrate aus common v0.2.0' (#405) from refactor/ai-migrate into main
CI / Web (shl) (push) Failing after 11s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 58s
CI / Web (pdf-viewer) (push) Failing after 57s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 23s
CI / Web (dms-browser) (push) Failing after 1m23s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m4s
2026-10-28 11:33:58 +01:00
patrick b0ec72b119 Merge pull request 'connect: migrate aus common v0.2.0' (#404) from refactor/connect-migrate into main
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m2s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 25s
CI / Web (pdf-viewer) (push) Failing after 1m0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / Web (dms-browser) (push) Failing after 1m23s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 54s
CI / Web (shl) (push) Failing after 12s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
2026-10-28 11:33:51 +01:00
patrick bf01806aa0 Merge pull request 'dms: migrate aus common v0.2.0' (#403) from refactor/dms-migrate into main
CI / Core-Modul (Build/Vet/Test) (push) Successful in 59s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web (shl) (push) Failing after 10s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 57s
CI / Web (pdf-viewer) (push) Failing after 59s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 22s
CI / Web (dms-browser) (push) Failing after 1m22s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
2026-10-28 11:33:45 +01:00
patrick e1fdc9e833 Merge pull request 'workflow: testdb aus common' (#393) from refactor/workflow-testdb into main
Workflow-Schnittstellen-Vertragstests / contract-tests (push) Successful in 16m10s
CI / Web (dms-browser) (push) Failing after 1m25s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 20s
CI / Web (pdf-viewer) (push) Failing after 55s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m0s
CI / Web (shl) (push) Failing after 14s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m1s
2026-10-28 11:33:37 +01:00
patrick 3f3715ee08 Merge pull request 'connect: testdb aus common' (#392) from refactor/connect-testdb into main
CI / Core-Modul (Build/Vet/Test) (push) Failing after 57s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
Connect-Schnittstellen-Vertragstests / contract-tests (push) Successful in 16m0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 6m17s
CI / Web (pdf-viewer) (push) Failing after 59s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 20s
CI / Web (dms-browser) (push) Failing after 1m16s
CI / Web (shl) (push) Failing after 13s
2026-10-28 11:33:31 +01:00
patrick 28381ef9b0 Merge pull request 'ai: testdb aus common' (#391) from refactor/ai-testdb into main
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 21s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m0s
CI / Web (shl) (push) Failing after 13s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 50s
AI-Schnittstellen-Vertragstests / contract-tests (push) Successful in 15m34s
CI / Web (pdf-viewer) (push) Failing after 1m3s
CI / Web (dms-browser) (push) Failing after 1m24s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
2026-10-28 11:33:25 +01:00
patrick 4b6d2df36b Merge pull request 'dms: testdb aus common' (#390) from refactor/dms-testdb into main
CI / Web (dms-browser) (push) Failing after 1m20s
CI / Web (pdf-viewer) (push) Failing after 54s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m29s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Web (shl) (push) Failing after 9s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 17s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 59s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
2026-10-28 11:33:17 +01:00
patrick c22ad6e8ca Merge pull request 'CI: Wegwerf-Postgres je Lauf fuer DB-Tests (A-08) und CODEOWNERS fuer common/ (A-09)' (#398) from feat/ci-db-cluster into main
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web (pdf-viewer) (push) Failing after 1m0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 17s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Web (dms-browser) (push) Failing after 1m22s
CI / Web (shl) (push) Failing after 14s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 58s
2026-10-28 11:32:56 +01:00
patrick ff79bf7514 Merge pull request 'portal: Zielmodul portal beim Token-Abruf (B-05)' (#397) from feat/portal-token-modul into main
CI / Web (pdf-viewer) (push) Failing after 57s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 6s
CI / Web (dms-browser) (push) Failing after 1m23s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (shl) (push) Failing after 13s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 59s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 18s
2026-10-28 11:32:50 +01:00
patrick 75ef51e412 Merge pull request 'docs: Arbeitskarten Stand 2026-10-28' (#395) from docs/arbeitskarten-stand into main
CI / Web (pdf-viewer) (push) Failing after 55s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 18s
CI / Web (dms-browser) (push) Failing after 1m28s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 57s
CI / Web (shl) (push) Failing after 14s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
2026-10-28 11:32:45 +01:00
patrick d2d420c71e Merge pull request 'docs: Vorbildsysteme (Mail + DMS) in PRODUKTARCHITEKTUR, DEVLOGs' (#380) from docs/vorbildsysteme-devlogs into main
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 21s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m2s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Web (shl) (push) Failing after 12s
CI / Web (dms-browser) (push) Failing after 1m23s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web (pdf-viewer) (push) Failing after 54s
2026-10-28 11:32:40 +01:00
patrick 2d12a6ab98 Merge pull request 'fix(workflow): contracttest an moduleadapter.NewServer-Signatur angepasst' (#374) from fix/workflow-contracttest-verifier into main
CI / Web (dms-browser) (push) Failing after 1m21s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m4s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 6s
CI / Web (pdf-viewer) (push) Failing after 57s
CI / Web (shl) (push) Failing after 11s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 25s
Workflow-Schnittstellen-Vertragstests / contract-tests (push) Successful in 15m5s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m26s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
2026-10-28 11:32:34 +01:00
patrick e0c0f7c537 Merge pull request 'refactor: Prüfgate-Pakete nach Funktion benannt, migration* gruppiert' (#373) from refactor/struktur-pakete into main
CI / Web (shl) (push) Failing after 14s
CI / Web (dms-browser) (push) Failing after 1m34s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 59s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 21s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m11s
CI / Web (pdf-viewer) (push) Failing after 1m1s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
2026-10-28 11:32:29 +01:00
patrick f5b8e7db7c Merge pull request 'mail: Vertragstest repariert, qa05/qa09-Gates skippen ohne .git/Root-Modul' (#400) from fix/mail-vertragstest into main
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m1s
Mail-Schnittstellen-Vertragstests / contract-tests (push) Successful in 14m47s
CI / Web (dms-browser) (push) Failing after 1m29s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 57s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 20s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (shl) (push) Failing after 13s
CI / Web (pdf-viewer) (push) Failing after 57s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
2026-10-28 11:32:14 +01:00
patrick 50c32b6ef8 Merge pull request 'archtest: searchchatapi-a11y-fixture mit archtest:allow (behebt TestAllHTTPServersUseHTTPHarden)' (#399) from fix/root-archtest-reichweite into main
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 19s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Successful in 1m1s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Web (dms-browser) (push) Failing after 1m28s
CI / Web (shl) (push) Failing after 13s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Web (pdf-viewer) (push) Failing after 58s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m0s
2026-10-28 11:32:09 +01:00
patrick 4d790fe925 Merge pull request 'dms/upload: MIME-Sniff gegen deklarierten Typ statt gegen Positivliste (Office/TIFF-Uploads)' (#401) from fix/dms-upload-sniff into main
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 59s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 25s
CI / Web (shl) (push) Failing after 14s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m21s
CI / Web (dms-browser) (push) Failing after 1m32s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / Web (pdf-viewer) (push) Failing after 56s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 6s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
2026-10-28 11:32:03 +01:00
patrick a458ff6f95 Merge pull request 'dms: Audit-Log-Schreiben fuer nexarch_app-Login-Rollen (Migration 0036) + Test repariert' (#402) from fix/dms-audit-sequence-grant into main
CI / Web (dms-browser) (push) Failing after 1m21s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m3s
CI / Web (shl) (push) Failing after 16s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 1m45s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 22s
2026-10-28 11:31:57 +01:00
patrickandClaude Sonnet 5.5 642510bff2 workflow: migrate aus common v0.2.0 (Tabellenname bleibt unveraendert)
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 52s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m50s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / Web (shl) (push) Failing after 13s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 20s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 14m58s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m0s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m18s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 2s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 14m18s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Failing after 13s
CI / Web (dms-browser) (pull_request) Failing after 1m22s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 58s
CI / Web (pdf-viewer) (pull_request) Failing after 57s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 14m30s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 4s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / Web (dms-browser) (push) Failing after 1m24s
Workflow-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 15m9s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 21s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
CI / Web (pdf-viewer) (push) Failing after 1m5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:22:55 +01:00
patrickandClaude Sonnet 5.5 88d9704469 dms: migrate aus common v0.2.0 (Tabellenname bleibt unveraendert)
CI / Web (pdf-viewer) (push) Failing after 1m8s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 59s
CI / Web (pdf-viewer) (pull_request) Failing after 1m2s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 1m29s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 2m7s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 13m25s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 20s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 13m26s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 58s
CI / Web (shl) (push) Failing after 11s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
CI / Web (shl) (pull_request) Failing after 13s
CI / Web (dms-browser) (pull_request) Failing after 1m19s
CI / Web (dms-browser) (push) Failing after 1m22s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 6s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 14m17s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 59s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 28s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:22:02 +01:00
patrickandClaude Sonnet 5.5 3c2bc971e1 ai: migrate aus common v0.2.0 (Tabellenname bleibt unveraendert)
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 20s
CI / Web (dms-browser) (pull_request) Failing after 1m26s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 13m56s
CI / Web (dms-browser) (push) Failing after 1m22s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 59s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 14m0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 57s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m4s
CI / Web (shl) (pull_request) Failing after 12s
AI-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 13m49s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 2s
CI / Web (pdf-viewer) (pull_request) Failing after 1m5s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 58s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m51s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 22s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 13m47s
CI / Web (pdf-viewer) (push) Failing after 1m0s
CI / Web (shl) (push) Failing after 14s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:21:06 +01:00
patrickandClaude Sonnet 5.5 1bdcff0f75 connect: migrate aus common v0.2.0 (Tabellenname bleibt unveraendert)
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 13m46s
CI / Web (dms-browser) (pull_request) Failing after 1m18s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Failing after 32s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 21s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 20s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 13m28s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 50s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m3s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web (pdf-viewer) (push) Failing after 1m2s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / Web (pdf-viewer) (pull_request) Failing after 1m4s
CI / Web (shl) (pull_request) Failing after 13s
CI / Web (shl) (push) Failing after 11s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m7s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 4s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m1s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 13m37s
CI / Web (dms-browser) (push) Failing after 1m23s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m53s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:20:50 +01:00
patrick bec1fb3cae Merge pull request 'Root-Modul: apierror und httpharden aus common v0.1.0' (#396) from refactor/root-common into main
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-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
2026-10-28 10:41:53 +01:00
patrick b2c1a67728 Merge pull request 'workflow: svcauth, tenantregistryclient aus common v0.1.0' (#389) from refactor/workflow-common into main
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
Workflow-Schnittstellen-Vertragstests / contract-tests (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
2026-10-28 10:41:45 +01:00
patrick 95582ad09d Merge pull request 'connect: auditclient, httpclient, policyclient aus common v0.1.0' (#388) from refactor/connect-common into main
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
Connect-Schnittstellen-Vertragstests / contract-tests (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
2026-10-28 10:41:39 +01:00
patrick a0f9aaef4c Merge pull request 'ai: auditclient, httpclient, loadtest, svcauth, tenantregistryclient aus common v0.1.0' (#387) from refactor/ai-common into main
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
2026-10-28 10:41:32 +01:00
patrick a443911e6a Merge pull request 'mail: httpclient, loadtest, policyclient aus common v0.1.0' (#386) from refactor/mail-common into main
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
Mail-Schnittstellen-Vertragstests / contract-tests (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
2026-10-28 10:41:26 +01:00
patrick fbb41235c0 Merge pull request 'dms: apierror, httpclient, tenantregistryclient aus common v0.1.0' (#384) from refactor/dms-common-klein into main
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
2026-10-28 10:41:19 +01:00
patrick 5b93ae8cae Merge pull request 'archive: Pilot-Umstellung auf common v0.1.0' (#383) from refactor/archive-common-pilot into main
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Archive-Schnittstellen-Vertragstests / contract-tests (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
2026-10-28 10:41:12 +01:00
patrick ad00c6258d Merge pull request 'common: moduleauth (Modul-Token-Verifier + Bearer-Middleware)' (#394) from feat/common-moduleauth into main
common Versions-Tag / tag (push) Successful in 13m39s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
2026-10-28 10:41:06 +01:00
patrick 2e9ec88b81 Merge pull request 'common v0.2.0: migrate mit Tabellenname als Parameter' (#385) from feat/common-migrate-v02 into main
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
common Versions-Tag / tag (push) Successful in 13m48s
2026-10-28 10:40:59 +01:00
patrickandClaude Sonnet 5.5 5f1d43caf1 CI-Cluster: Admin-DSN auf Datenbank postgres (Root-Tests ersetzen /postgres? im DSN)
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 10:28:26 +01:00
patrickandClaude Sonnet 5.5 0d1721f169 dms: USAGE auf audit_log_id_seq fuer nexarch_app (Migration 0036), Test mit Schema-Rechten
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (pdf-viewer) (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 / Web (shl) (push) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 10:28:10 +01:00
patrickandClaude Sonnet 5.5 4e16d8b155 dms/upload: Sniff-Ergebnis gegen deklarierten Typ pruefen statt gegen die Positivliste
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 10:26:14 +01:00
patrickandClaude Sonnet 5.5 63d7e01948 mail: Vertragstest (Anhang-Content-Type, zwei Endpunkt-Faelle), Gate-Tests ohne .git/Root-Modul skippen
CI / Web (pdf-viewer) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Mail-Schnittstellen-Vertragstests / contract-tests (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Mail-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Mail-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 10:22:49 +01:00
patrickandClaude Sonnet 5.5 59c0b0a2d1 ai: archtest:allow fuer searchchatapi-a11y-fixture (wie die Schwester-Fixtures)
AI-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (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
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 10:21:22 +01:00
patrickandClaude Sonnet 5.5 631dd4080e CI: Wegwerf-Postgres je Lauf fuer DB-Tests, CODEOWNERS fuer common/
CI / Web (dms-browser) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 10:19:58 +01:00
patrickandClaude Sonnet 5.5 7df4cd573f portal: Zielmodul beim Token-Abruf (NEXT_PUBLIC_TOKEN_MODULE), Betriebsdoku
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (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 / Web (dms-browser) (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (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
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (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
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 10:19:06 +01:00
patrickandClaude Sonnet 5.5 07eb74cadf Root-Modul: apierror und httpharden aus common v0.1.0
CI / Web (dms-browser) (push) Failing after 1m26s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 21s
CI / Web (pdf-viewer) (pull_request) Failing after 1m2s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (shl) (pull_request) Failing after 11s
CI / Web (shl) (push) Failing after 11s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 1m3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 19s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 5s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 13m12s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m0s
CI / Web (dms-browser) (pull_request) Failing after 1m27s
Core-Schnittstellen-Vertragstests / contract-tests (push) Successful in 12m23s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 09:37:03 +01:00
patrickandClaude Sonnet 5.5 8d68895eac docs: Arbeitskarten auf Stand 2026-10-28
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Failing after 1m26s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 12m30s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 3m9s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 59s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 22s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m55s
CI / Web (dms-browser) (push) Failing after 1m28s
CI / Web (shl) (push) Failing after 9s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 12m46s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 59s
CI / Web (shl) (pull_request) Failing after 10s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 58s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 21s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m0s
CI / Web (pdf-viewer) (pull_request) Failing after 1m0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:50:59 +01:00
patrickandClaude Sonnet 5.5 51b639625f common/moduleauth: Modul-Token-Verifier (Ed25519, JWKS) und Bearer-Middleware
CI / Web (dms-browser) (pull_request) Failing after 1m16s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m1s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
CI / Web (pdf-viewer) (pull_request) Failing after 57s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 18s
CI / Web (shl) (push) Failing after 11s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 52s
CI / Web (shl) (pull_request) Failing after 11s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 57s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 21s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 55s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 12m16s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Failing after 21m17s
CI / Web (pdf-viewer) (push) Failing after 57s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m58s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / Web (dms-browser) (push) Failing after 1m18s
common Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 11m57s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 12m19s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 3s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Failing after 31s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:40:30 +01:00
patrickandClaude Sonnet 5.5 678bd01335 workflow: testdb aus common statt interner Kopie
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web (pdf-viewer) (pull_request) Failing after 59s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m1s
CI / Web (shl) (pull_request) Failing after 13s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 24s
CI / Web (dms-browser) (push) Failing after 1m23s
CI / Web (pdf-viewer) (push) Failing after 59s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 2m6s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 3m51s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 11m41s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 11m50s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
Workflow-Schnittstellen-Vertragstests / contract-tests (pull_request) Failing after 41s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 56s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Web (shl) (push) Failing after 13s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 21s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 56s
Workflow-Schnittstellen-Vertragstests / contract-tests (push) Failing after 59s
CI / Web (dms-browser) (pull_request) Failing after 1m17s
Workflow-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 11m18s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:38:24 +01:00
patrickandClaude Sonnet 5.5 f5f0bd8673 connect: testdb aus common statt interner Kopie
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 58s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 11m40s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m10s
Connect-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 12m3s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 57s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m49s
CI / Web (dms-browser) (push) Failing after 1m23s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 24s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 1m11s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 55s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (shl) (push) Failing after 13s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / Web (dms-browser) (pull_request) Failing after 1m25s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 11m49s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 22s
CI / Web (pdf-viewer) (pull_request) Failing after 54s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 3m23s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
Connect-Schnittstellen-Vertragstests / contract-tests (push) Successful in 10m42s
CI / Web (shl) (pull_request) Failing after 11s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:38:01 +01:00
patrickandClaude Sonnet 5.5 0854d7b040 ai: testdb aus common statt interner Kopie
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 1m12s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / Web (pdf-viewer) (pull_request) Failing after 1m0s
CI / Web (dms-browser) (push) Failing after 1m21s
CI / Web (shl) (push) Failing after 10s
CI / Web (dms-browser) (pull_request) Failing after 1m30s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 3m9s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 19s
AI-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 11m55s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 57s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 11m59s
AI-Schnittstellen-Vertragstests / contract-tests (push) Successful in 10m0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 11m12s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 2m57s
CI / Web (shl) (pull_request) Failing after 11s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m6s
AI-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 12m17s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 21s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m48s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 52s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:37:39 +01:00
patrickandClaude Sonnet 5.5 0c6a943440 dms: testdb aus common statt interner Kopie
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 1m22s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / Web (pdf-viewer) (pull_request) Failing after 57s
CI / Web (shl) (pull_request) Failing after 12s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 21s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Web (shl) (push) Failing after 11s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m46s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 1m6s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m2s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
CI / Web (dms-browser) (pull_request) Failing after 1m22s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 3m16s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 10m56s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 11m44s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 11m24s
CI / Web (pdf-viewer) (push) Failing after 53s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 22s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:37:00 +01:00
patrickandClaude Sonnet 5.5 eaffcaf885 workflow: svcauth, tenantregistryclient aus common v0.1.0
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 7s
CI / Web (dms-browser) (pull_request) Failing after 1m24s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 8s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 9m47s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 3m26s
Workflow-Schnittstellen-Vertragstests / contract-tests (pull_request) Failing after 57s
CI / Web (shl) (pull_request) Failing after 11s
CI / Web (dms-browser) (push) Failing after 1m31s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 30s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 3s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 11m29s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m6s
CI / Web (pdf-viewer) (push) Failing after 1m3s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 4m11s
CI / Web (pdf-viewer) (pull_request) Failing after 57s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 10m30s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 23s
CI / Web (shl) (push) Failing after 14s
Workflow-Schnittstellen-Vertragstests / contract-tests (push) Failing after 41s
Workflow-Pflichttest-Gate / pflichttest-gate (pull_request) Failing after 1m13s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 10m25s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m57s
Das Pflichttest-Gate von workflow verweist nicht mehr auf die geloeschten
Pakete (common hat ein eigenes Gate).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:33:55 +01:00
patrickandClaude Sonnet 5.5 7958102870 connect: auditclient, httpclient, policyclient aus common v0.1.0
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Connect-Schnittstellen-Vertragstests / contract-tests (push) Successful in 10m0s
CI / Web (shl) (pull_request) Failing after 15s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 25s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 3m28s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m4s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 1m0s
CI / Web (dms-browser) (push) Failing after 1m31s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 45s
Connect-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 11m18s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Web (shl) (push) Failing after 12s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 2m4s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 25s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 10m25s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 1m2s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 10m55s
CI / Web (pdf-viewer) (pull_request) Failing after 1m4s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Web (dms-browser) (pull_request) Failing after 1m33s
auditclient und policyclient aus der Liste in check-security-test-coverage.sh
entfernt (Pakete liegen jetzt in common, dort durch das common-Gate gedeckt).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:33:13 +01:00
patrickandClaude Sonnet 5.5 ff5113f0b2 ai: auditclient, httpclient, loadtest, svcauth, tenantregistryclient aus common v0.1.0
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 24s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 50s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 2m1s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 6s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 2s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 23s
CI / Web (pdf-viewer) (push) Failing after 1m6s
CI / Web (dms-browser) (pull_request) Failing after 1m31s
CI / Web (shl) (pull_request) Failing after 11s
CI / Web (pdf-viewer) (pull_request) Failing after 1m2s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Failing after 7m19s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 10m32s
CI / Web (shl) (push) Failing after 14s
CI / Web (dms-browser) (push) Failing after 1m32s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 5s
AI-Pflichttest-Gate / pflichttest-gate (pull_request) Failing after 44s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 51s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m7s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 13m10s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m2s
Das Pflichttest-Gate von ai verweist nicht mehr auf das geloeschte
svcauth-Paket (common hat ein eigenes Gate).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:32:34 +01:00
patrickandClaude Sonnet 5.5 27681f31be mail: httpclient, loadtest, policyclient aus common v0.1.0
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 9m7s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m8s
Mail-Schnittstellen-Vertragstests / contract-tests (pull_request) Failing after 45s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 1m9s
Mail-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 9m36s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m5s
CI / Web (dms-browser) (push) Failing after 1m32s
CI / Web (pdf-viewer) (pull_request) Failing after 1m8s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
CI / Web (dms-browser) (pull_request) Failing after 1m34s
Mail-Schnittstellen-Vertragstests / contract-tests (push) Failing after 1m3s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / Web (shl) (push) Failing after 14s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 22s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 1m4s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 5s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 23s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 9m13s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 55s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 2m5s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 3m9s
CI / Web (shl) (pull_request) Failing after 12s
Der Waechtertest gegen http.DefaultClient liegt jetzt in internal/archtest.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:29:11 +01:00
patrickandClaude Sonnet 5.5 f8905e9c64 common/migrate v0.2.0: Tabellenname als Parameter (migrate.New), Tag-Workflow mit common/MINOR
CI / Web (dms-browser) (push) Failing after 1m28s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 2m46s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / Web (dms-browser) (pull_request) Failing after 1m27s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 2m56s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 2s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 20s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 9m12s
CI / Web (pdf-viewer) (push) Failing after 1m8s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 25s
CI / Web (pdf-viewer) (pull_request) Failing after 1m2s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m2s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 3m3s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 5s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 3m4s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
common Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 9m21s
CI / Web (shl) (push) Failing after 15s
CI / Web (shl) (pull_request) Failing after 13s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 1m57s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m4s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:26:27 +01:00
patrickandClaude Sonnet 5.5 0df4696e8c dms: apierror, httpclient, tenantregistryclient aus common v0.1.0
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m7s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 3m4s
CI / Web (pdf-viewer) (push) Failing after 1m2s
CI / Web (shl) (push) Failing after 14s
CI / Web (dms-browser) (push) Failing after 1m34s
CI / Web (pdf-viewer) (pull_request) Failing after 1m2s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 2m39s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 23s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m9s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 21s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / Web (shl) (pull_request) Failing after 12s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 8m37s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 2m46s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 2s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
CI / Web (dms-browser) (pull_request) Failing after 1m30s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 5s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 2m49s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 2m6s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Die common-Fassung von apierror enthaelt die 5xx-Behebung (Text verborgen,
Korrelations-ID). Der Waechtertest gegen http.DefaultClient liegt jetzt in
internal/archtest.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:23:56 +01:00
patrickandClaude Sonnet 5.5 de90c3d935 archive: gemeinsame Pakete aus common v0.1.0 statt interner Kopien
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 3m11s
CI / Web (dms-browser) (push) Failing after 1m40s
CI / Web (shl) (pull_request) Failing after 13s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 2m41s
Archive-Pflichttest-Gate / pflichttest-gate (pull_request) Failing after 2m57s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 2m1s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 5s
CI / Web (shl) (push) Failing after 13s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Archive-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 3m7s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 6s
CI / Web (pdf-viewer) (push) Failing after 1m4s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 4s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Successful in 2m39s
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m1s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 2m42s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Failing after 3s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Failing after 33s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 2m41s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m5s
CI / Web (dms-browser) (pull_request) Failing after 1m43s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 20s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 26s
CI / Web (pdf-viewer) (pull_request) Failing after 1m9s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Failing after 3s
Archive-Schnittstellen-Vertragstests / contract-tests (push) Successful in 8m26s
apierror, auditclient, httpclient, httpharden, svcauth und tenantregistryclient
kommen aus gitea.perlbach24.de/scripte/nexarch/common. Der Wächtertest gegen
http.DefaultClient liegt jetzt in internal/archtest.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:19:13 +01:00
patrick 184a219c8a Merge pull request 'SHL-04: AccountBar-Dopplung aufgeloest' (#372) from feature/shl-03-accountbar-dedup into main
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (pdf-viewer) (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 / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
2026-10-27 23:07:29 +01:00
patrick 118a524cec Merge pull request 'Portal: Gruppen, Arbeitsvorrat, Betriebsblock, Mandant aus Sitzung' (#382) from feature/portal-ausbau into feature/shl-03-accountbar-dedup
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (shl) (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
CI / Web (pdf-viewer) (push) 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 / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
2026-10-27 23:06:34 +01:00
patrickandClaude Sonnet 5.5 ab826dac3c portal: Betriebsblock (Systemstatus, Kennzahlen-Summe), Caches und Policy aus den Route-Dateien ausgelagert
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) 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
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:05:44 +01:00
patrickandClaude Sonnet 5.5 d5acbe1029 portal: Gruppen, Arbeitsvorrat, Mandant aus Sitzung, URL-Override; Arbeitskarten
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 23:02:36 +01:00
patrickandClaude Sonnet 5.5 6b42de39b9 portal: README mit Umgebungsvariablen und Verhalten der Route
CI / Web (dms-browser) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) 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 / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) 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 / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 22:59:03 +01:00
patrickandClaude Sonnet 5.5 fd4a0568a3 portal: visible-modules prueft Modul-Token (Mandant/Rolle aus Claims), 30s-Cache je Mandant/Rolle
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (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
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) 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
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 22:49:22 +01:00
patrickandClaude Sonnet 5.5 65cc0ac7bf portal: AccountBar mit Benutzer/Rolle/Mandant, kein Neuladen der Module beim Sprachwechsel
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 22:46:35 +01:00
patrickandClaude Sonnet 5.5 bc47c1331b SHL-04: AccountBar zeigt Benutzer, Rolle und Mandant aus der Sitzung
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (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 / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web (dms-browser) (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
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 22:31:17 +01:00
patrick b775de651b Merge pull request 'common/testdb: AdminDSN mit REQUIRE_DB + DB-Test-Workflow' (#381) from feat/common-requiredb into main
CI / Web (dms-browser) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
common Versions-Tag / tag (push) Successful in 7m50s
CI / Web (shl) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
2026-10-27 18:15:39 +01:00
patrick 8db663b7db Merge pull request 'feat(common): parametrisiertes Pflichttest-Gate für common/' (#379) from feat/common-pflichttestgate into main
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
common Versions-Tag / tag (push) Successful in 7m1s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
2026-10-27 18:15:30 +01:00
patrick 0b90c8b339 Merge pull request 'feat: versioniertes Modul common/ (ohne Verbraucher)' (#378) from feat/common-modul into main
CI / Web (pdf-viewer) (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 / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
common Versions-Tag / tag (push) Successful in 7m23s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
2026-10-27 18:15:03 +01:00
patrickandClaude Sonnet 5.5 3f4ac77b1e common/testdb: AdminDSN mit REQUIRE_DB, DB-Test-Workflow fuer Runner nexarch-test
DB-Integrationstests / db-tests (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, 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
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 17:58:25 +01:00
patrickandClaude Sonnet 5.5 843825abff docs: Vorbildsysteme (Mail + DMS) in PRODUKTARCHITEKTUR, DEVLOGs nachgezogen
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (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
Abschnitt 1a: Mail (archivmail, MailPiler), DMS (paperless-ngx, Alfresco,
Docspell, ecoDMS, archivdms); weitere Vergleichsprojekte als offen markiert.
DEVLOG.md, dms/DEVLOG.md, web/shl/DEVLOG.md: Session-Protokolle.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 15:47:35 +01:00
patrickandClaude Sonnet 5.5 0c8b3fe2b3 feat(common): parametrisiertes Pflichttest-Gate, Gate fuer common/ selbst
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
common Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CheckDiff(changed, patterns): gleiche Logik wie die Modul-Gates, Pfadmuster
vom Aufrufer. cmd/pflichttestgate + Workflow decken svcauth,
tenantregistryclient, auditclient, policyclient, apierror, httpharden ab.
README: Auswirkungsliste und Minor-Version bei Breaking Changes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 15:25:26 +01:00
patrickandClaude Sonnet 5.5 4f07bc73a2 feat: versioniertes Modul common/ (ohne Verbraucher)
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
Pakete: apierror, auditclient, httpclient, httpharden, loadtest, migrate,
policyclient, svcauth, tenantregistryclient, testdb. Code stammt aus den
bisher byte-gleichen Modulkopien (ohne Kommentare/Importpfade verglichen).
migrate/testdb brauchen pgx v5.9.2.

Auslieferung per Git-Tag common/vX.Y.Z (Workflow common-tag.yml, setzt nach
Merge in main den naechsten Patch-Tag nach Build/Vet/Test). Kein replace,
damit Module einzeln baubar bleiben. Verbraucher werden in Folge-PRs
umgestellt.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 14:40:46 +01:00
patrickandClaude Sonnet 5.5 35911bfd6f fix(workflow): contracttest an moduleadapter.NewServer-Signatur angepasst
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 35s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 24s
CI / Web (dms-browser) (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m3s
CI / Web (shl) (push) Failing after 14s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
Workflow-Schnittstellen-Vertragstests / contract-tests (push) Successful in 6m47s
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
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Failing after 1m1s
Workflow-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Workflow-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 1m25s
NewServer verlangt seit ENG-06 einen TenantVerifier; der Vertragstest
rief noch mit drei Argumenten auf, go vet schlug fehl. Stub wie beim
backchannel-Vertragstest (alwaysValidVerifier).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 12:54:20 +01:00
patrickandClaude Sonnet 5.5 4497da760d style: gofmt in drei beruehrten Dateien (reine Formatierung, schon auf main unformatiert)
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Failing after 56s
Supply-Chain-Scan (Go) / govulncheck (push) Failing after 51s
CI / Web (dms-browser) (pull_request) Failing after 1m36s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (shl) (push) Failing after 14s
CI / Core-Modul (Build/Vet/Test) (pull_request) Failing after 1m3s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Successful in 2m53s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Failing after 1m29s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Successful in 4s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Failing after 33s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Successful in 3s
CI / Web (shl) (pull_request) Failing after 17s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Failing after 2m0s
AI-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 2m35s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Failing after 23s
CI / Web (pdf-viewer) (push) Failing after 1m8s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Failing after 2m46s
Workflow-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Successful in 4s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 2m36s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Successful in 4s
CI / Web (pdf-viewer) (pull_request) Failing after 1m14s
Archive-Pflichttest-Gate / pflichttest-gate (pull_request) Successful in 2m38s
CI / Core-Modul (Build/Vet/Test) (push) Failing after 1m5s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 12:51:57 +01:00
patrickandClaude Sonnet 5.5 5b8c20777d refactor: Pruefgate-Pakete nach Funktion benannt, migration* gruppiert
- dms/ai/workflow: qa0x-Pakete nach internal/gates/<thema> verschoben, Paketname = Thema
- internal/migration{acl,audit,...} -> internal/migration/{acl,audit,...}
- Importpfade, Gate-Skripte und zwei relative Migrationspfade angepasst
- keine Logikaenderung; mail-Gates bewusst unveraendert (pfadabhaengig)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 12:44:21 +01:00
patrickandClaude Sonnet 5 2518160c92 SHL-04: AccountBar-Dopplung aufgeloest (duenne Wrapper statt kopierter JSX)
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
Fable-Review auf Code-Dopplung (P1). web/dms-browser, web/dms-upload,
web/pdf-viewer hatten byteidentische components/AccountBar.tsx. Darstellung
jetzt einmal in web/shl/components/AccountBar.tsx (visible/onLogout als
Props). Die drei App-lokalen Dateien bleiben als duenne 10-Zeilen-Wrapper
bestehen (loesen authMode()/getSession() aus dem jeweils eigenen,
unterschiedlichen lib/http.ts auf) statt komplett zu verschwinden --
direktes Reichen der onLogout-Funktion von layout.tsx (Server Component)
an die shl-Komponente verletzt sonst die RSC-Props-Grenze ("Event handlers
cannot be passed to Client Component props"), erst beim Build entdeckt
und korrigiert.

next build + npx vitest run auf allen 3 Apps gruen (Testhost 131).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-19 23:17:02 +02:00
510 changed files with 6637 additions and 2993 deletions

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
# common/ ist modulübergreifend: Änderungen brauchen Review (Auswirkungsliste im PR)
/common/ @patrick
@@ -4,7 +4,6 @@ on:
pull_request:
paths:
- "archive/**"
- "common/**"
jobs:
pflichttest-gate:
@@ -0,0 +1,23 @@
name: common Pflichttest-Gate
on:
pull_request:
paths:
- "common/**"
jobs:
pflichttest-gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-go@v5
with:
go-version: "1.25"
- name: Gate bauen
working-directory: common
run: go build -o /tmp/pflichttestgate ./cmd/pflichttestgate
- name: Geänderte Dateien gegen Pflichttest-Regel pruefen
run: |
git diff --name-only "origin/${{ github.base_ref }}...HEAD" -- common/ | /tmp/pflichttestgate
+33
View File
@@ -0,0 +1,33 @@
name: common Versions-Tag
on:
push:
branches: [main]
paths:
- "common/**"
jobs:
tag:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-go@v5
with:
go-version: "1.25"
- name: Build, Vet, Test
working-directory: common
run: |
go build ./...
go vet ./...
go test ./... -count=1
- name: Naechsten Tag setzen
run: |
minor=$(tr -d '[:space:]' < common/MINOR)
last=$(git tag -l "common/v0.${minor}.*" --sort=-v:refname | head -n1)
if [ -z "$last" ]; then next="common/v0.${minor}.0"; else
patch=${last##*.}; base=${last%.*}; next="${base}.$((patch + 1))"
fi
git tag "$next"
git push origin "$next"
+37
View File
@@ -0,0 +1,37 @@
name: DB-Integrationstests
on:
pull_request:
paths:
- "common/**"
- "archive/**"
- "ai/**"
- "connect/**"
- "scripts/ci-pg-cluster.sh"
- ".gitea/workflows/db-tests.yml"
jobs:
db-tests:
runs-on: nexarch-test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.25"
- name: Wegwerf-Postgres starten
run: scripts/ci-pg-cluster.sh start
- name: common
working-directory: common
run: go test ./... -count=1 -p 1
- name: archive
working-directory: archive
run: go test ./... -count=1 -p 1
- name: ai
working-directory: ai
run: go test ./... -count=1 -p 1
- name: connect
working-directory: connect
run: go test ./... -count=1 -p 1
- name: Wegwerf-Postgres stoppen
if: always()
run: scripts/ci-pg-cluster.sh stop
@@ -4,7 +4,6 @@ on:
pull_request:
paths:
- "mail/**"
- "common/**"
jobs:
pflichttest-gate:
+564
View File
@@ -604,3 +604,567 @@ Keine Commits in dieser Session.
- scripts/qa02-foundation-gate.sh | 2 +-
---
## 2026-10-19 12:07 – 12:07 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/audit-log/app/page.tsx | 6 +++---
- web/dms-browser/app/layout.tsx | 6 +++---
- web/lic-admin/app/page.tsx | 18 +++++++++---------
- web/portal/app/layout.tsx | 12 ++----------
- web/portal/app/page.tsx | 4 ++--
- web/shl/components/ModuleNavShell.tsx | 18 +++++++++++++++---
- web/shl/components/Shell.tsx | 2 ++
- web/shl/index.ts | 2 +-
- web/shl/tokens/tokens.ts | 24 ++++++++++++++++++++++++
- web/status-page/app/page.tsx | 12 ++++++------
- web/tenant-admin/app/page.tsx | 8 ++++----
---
## 2026-10-19 12:08 – 12:08 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/audit-log/app/page.tsx | 6 +++---
- web/dms-browser/app/layout.tsx | 6 +++---
- web/lic-admin/app/page.tsx | 18 +++++++++---------
- web/portal/app/layout.tsx | 12 ++----------
- web/portal/app/page.tsx | 4 ++--
- web/shl/components/ModuleNavShell.tsx | 18 +++++++++++++++---
- web/shl/components/Shell.tsx | 2 ++
- web/shl/index.ts | 2 +-
- web/shl/tokens/tokens.ts | 24 ++++++++++++++++++++++++
- web/status-page/app/page.tsx | 12 ++++++------
- web/tenant-admin/app/page.tsx | 8 ++++----
---
## 2026-10-19 12:14 – 12:15 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/audit-log/app/page.tsx | 6 +++---
- web/dms-browser/app/layout.tsx | 6 +++---
- web/lic-admin/app/page.tsx | 18 +++++++++---------
- web/portal/app/layout.tsx | 12 ++----------
- web/portal/app/page.tsx | 4 ++--
- web/shl/components/ModuleNavShell.tsx | 18 +++++++++++++++---
- web/shl/components/Shell.tsx | 2 ++
- web/shl/index.ts | 2 +-
- web/shl/tokens/tokens.ts | 24 ++++++++++++++++++++++++
- web/status-page/app/page.tsx | 12 ++++++------
- web/tenant-admin/app/page.tsx | 8 ++++----
---
## 2026-10-19 12:29 – 12:30 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms/internal/upload/service.go | 38 ++++++++++++++++++++++++++++++---
- dms/internal/upload/service_test.go | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-10-19 12:31 – 12:31 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms/internal/upload/service.go | 25 ++++++++++++++++++++++++-
- dms/internal/upload/service_test.go | 44 ++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-10-19 12:44 – 12:53 (8m)
**Beschreibung:** Claude Code Session
**Projekt:** banking
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms/internal/upload/service.go | 25 ++++++++++++++++++++++++-
- dms/internal/upload/service_test.go | 44 ++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-10-19 12:54 – 12:54 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms/internal/upload/service.go | 25 ++++++++++++++++++++++++-
- dms/internal/upload/service_test.go | 44 ++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-10-19 13:47 – 13:50 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** banking
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/mail-postfach/app/layout.tsx | 8 +++++---
- web/shl/components/ModuleNavShell.tsx | 4 ++++
---
## 2026-10-19 14:49 – 14:50 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- MIGRATIONSKONZEPT.md | 2 +-
- PRODUKTARCHITEKTUR.md | 2 +-
- SICHERHEITSKONZEPT.md | 16 ++++++++--------
- SKALIERUNGSKONZEPT.md | 2 +-
- STORAGE-KONZEPT.md | 4 ++--
- dms/internal/searchsync/searchsync_test.go | 4 ++--
- web/portal/app/ModuleGrid.test.tsx | 3 ++-
- web/portal/app/ModuleGrid.tsx | 17 +----------------
- web/portal/lib/modules.test.ts | 4 +++-
- web/shl/components/ModuleNavShell.tsx | 27 +++++++++++++++++++--------
- web/shl/index.ts | 2 +-
---
## 2026-10-19 14:58 – 23:11 (8h 12m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-20 04:03 – 04:03 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-20 04:03 – 04:03 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-20 04:03 – 04:03 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-20 04:03 – 04:03 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-20 04:03 – 04:03 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 11:18 – 11:18 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 11:20 – 11:20 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 11:54 – 11:54 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 11:55 – 11:55 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 11:57 – 11:57 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 11:58 – 11:58 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 12:37 – 12:38 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 12:38 – 12:38 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 12:40 – 12:40 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 12:42 – 12:42 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 12:42 – 12:44 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 12:47 – 12:52 (4m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 12:53 – 12:54 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 12:55 – 12:56 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 13:00 – 13:01 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** Trad-Bot
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 13:35 – 13:39 (4m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 13:42 – 13:52 (10m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 13:53 – 13:53 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 13:54 – 14:06 (12m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 14:08 – 14:41 (32m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 15:03 – 15:25 (22m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
## 2026-10-27 15:27 – 15:43 (15m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- web/dms-browser/components/AccountBar.tsx | 14 +++++++-------
- web/dms-upload/components/AccountBar.tsx | 14 +++++++-------
- web/pdf-viewer/components/AccountBar.tsx | 14 +++++++-------
- web/shl/components/AccountBar.tsx | 22 ++++++++++++++++++++++
- web/shl/index.ts | 3 +++
---
+12 -1
View File
@@ -6,6 +6,17 @@ Stand: 2026-08-26. Zusammenführung aller bisherigen Entscheidungen aus `nexarch
NEXARCH ist die Nachfolgeplattform von **archivmail** (E-Mail-Archivierung) und **archivdms** (Dokumentenmanagement) — nicht als Umbenennung, sondern als modulare Neuentwicklung unter der Positionierung **"Next Generation Information Management"**: E-Mails, Dokumente, digitale Archivierung, OCR, Volltextsuche, Workflows, Compliance, Integrationen, KI — als ein zusammenhängendes System, nicht als zwei getrennte Werkzeuge nebeneinander.
## 1a. Vorbildsysteme
NEXARCH vereint die Stärken bestehender Systeme und vermeidet deren bekannte Schwächen (Details: `dms-kanban/known-issues-archivdms.md`, `dms-kanban/known-issues-archivmail.md`).
| Bereich | Vorbildsysteme |
|---|---|
| Mail | **archivmail** (eigenes Produkt, Vorgänger), **MailPiler** |
| DMS | **paperless-ngx**, **Alfresco**, **Docspell**, **ecoDMS**, **archivdms** (eigenes Produkt, Vorgänger) |
Weitere Vergleichsprojekte (z. B. OpenKM, Nuxeo, Mayan EDMS, Seafile) sind noch zu prüfen. Für das DMS-Modul siehe auch `dms/README.md`.
## 2. Architekturprinzip
**Ein modularer Monolith aus sieben eigenständigen, aber koordinierten Diensten** — kein Microservice-Zwang, aber klare Dienstgrenzen mit eigenem Datenmodell, eigenem Go-Binary, eigenem Kanban-Board:
@@ -64,7 +75,7 @@ Kein Modul kopiert die Daten eines anderen — stattdessen ein wiederkehrendes *
Gemeinsamer Nenner aller drei: **Referenz statt Kopie, Adapter statt Direktkopplung.**
Go-`internal/`-Pakete sind zwischen den Modulen nicht sichtbar; identische Querschnittspakete werden deshalb im geteilten Modul `common/` gehalten (per `replace` in den `go.mod` eingebunden, keine eigenen Abhängigkeiten außer der Standardbibliothek). Pilot: `common/httpclient`, `common/apierror`. Fachlich verschiedene Pakete (`audittrail`, `cutoverstage`, `crypto`) bleiben modul-lokal.
Go-`internal/`-Pakete sind zwischen den Modulen nicht sichtbar; identische Querschnittspakete liegen deshalb im versionierten Modul `common/` (Git-Tags `common/vX.Y.Z`, siehe `common/README.md`). So bleiben Module einzeln baubar (Docker, eigenes Repo, Partner-Build). Fachlich verschiedene Pakete (`audittrail`, `cutoverstage`, `crypto`) bleiben modul-lokal.
Dasselbe Prinzip gilt auch innerhalb eines Moduls, auf Code-Ebene: Hauptdateien/Entry-Points bleiben klein, Fachlogik wandert in eigene Module. Vor einer neuen Funktions-/Modul-Datei wird geprüft, ob dieselbe Funktionalität nicht schon woanders existiert (auch modulübergreifend, z. B. in Core) — keine doppelten Funktionsdateien. Das eigene Kanban-Planungswerkzeug wurde nach genau diesem Muster korrigiert (sieben `kanban.html` enthielten identisches JS/CSS als Volltext-Duplikat, damals in `_shared/kanban.js`/`kanban.css` ausgelagert) — die Boards selbst sind inzwischen komplett aus dem Repo entfernt (Ticket-Historie liegt in der Gitea-PR-Historie), das Prinzip "keine doppelten Funktionsdateien" gilt unverändert für den eigentlichen NEXARCH-Code.
+45 -17
View File
@@ -41,9 +41,10 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/semanticsearchapi"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/summarize"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/summaryapi"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/tenantregistryclient"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/threadsummarize"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/vectorindex"
"gitea.perlbach24.de/scripte/nexarch/common/policyclient"
"gitea.perlbach24.de/scripte/nexarch/common/tenantregistryclient"
)
const workerPollInterval = 2 * time.Second
@@ -52,13 +53,24 @@ const defaultListenAddr = "127.0.0.1:9600"
const defaultModel = "default"
type config struct {
dsn string
serviceToken string
addr string
model string
moduleURLs map[string]string
coreBaseURL string
coreServiceToken string
dsn string
serviceToken string
addr string
model string
moduleURLs map[string]string
coreBaseURL string
coreServiceToken string
policyURL string
policyServiceToken string
policyDisabled bool
}
// policyClient liefert nil nur mit NEXARCH_AI_APP_POLICY_DISABLED=1.
func (c config) policyClient() *policyclient.Client {
if c.policyURL == "" {
return nil
}
return policyclient.New(c.policyURL, c.policyServiceToken)
}
// parseModuleBaseURLs liest "modul=url,modul2=url2" (EXT-05: je Modul eine
@@ -84,13 +96,19 @@ func parseModuleBaseURLs(raw string) map[string]string {
// Programmabbruchs weiter unten im Code.
func loadConfig(getenv func(string) string) (config, error) {
cfg := config{
dsn: getenv("NEXARCH_AI_APP_TENANT_DSN"),
serviceToken: getenv("NEXARCH_AI_APP_SERVICE_TOKEN"),
addr: getenv("NEXARCH_AI_APP_LISTEN_ADDR"),
model: getenv("NEXARCH_AI_APP_MODEL"),
moduleURLs: parseModuleBaseURLs(getenv("NEXARCH_AI_APP_MODULE_BASE_URLS")),
coreBaseURL: getenv("NEXARCH_AI_APP_CORE_BASE_URL"),
coreServiceToken: getenv("NEXARCH_AI_APP_CORE_SERVICE_TOKEN"),
dsn: getenv("NEXARCH_AI_APP_TENANT_DSN"),
serviceToken: getenv("NEXARCH_AI_APP_SERVICE_TOKEN"),
addr: getenv("NEXARCH_AI_APP_LISTEN_ADDR"),
model: getenv("NEXARCH_AI_APP_MODEL"),
moduleURLs: parseModuleBaseURLs(getenv("NEXARCH_AI_APP_MODULE_BASE_URLS")),
coreBaseURL: getenv("NEXARCH_AI_APP_CORE_BASE_URL"),
coreServiceToken: getenv("NEXARCH_AI_APP_CORE_SERVICE_TOKEN"),
policyURL: getenv("NEXARCH_AI_APP_POLICY_URL"),
policyServiceToken: getenv("NEXARCH_AI_APP_POLICY_SERVICE_TOKEN"),
policyDisabled: getenv("NEXARCH_AI_APP_POLICY_DISABLED") == "1",
}
if cfg.policyURL != "" && cfg.policyServiceToken == "" {
return config{}, errors.New("ai-app: NEXARCH_AI_APP_POLICY_SERVICE_TOKEN ist erforderlich, wenn NEXARCH_AI_APP_POLICY_URL gesetzt ist")
}
if cfg.dsn == "" {
return config{}, errors.New("ai-app: NEXARCH_AI_APP_TENANT_DSN ist erforderlich")
@@ -98,6 +116,9 @@ func loadConfig(getenv func(string) string) (config, error) {
if cfg.serviceToken == "" {
return config{}, errors.New("ai-app: NEXARCH_AI_APP_SERVICE_TOKEN ist erforderlich")
}
if cfg.policyURL == "" && !cfg.policyDisabled {
return config{}, errors.New("ai-app: NEXARCH_AI_APP_POLICY_URL ist erforderlich (oder NEXARCH_AI_APP_POLICY_DISABLED=1 als Uebergang)")
}
if cfg.addr == "" {
cfg.addr = defaultListenAddr
}
@@ -129,7 +150,11 @@ func build(pool *pgxpool.Pool, cfg config, prov provider.Provider, workerID stri
).RegisterRoutes(mux)
searchSvc := semanticsearch.New(prov, vectorindex.New(pool), cfg.model)
semanticsearchapi.NewServer(searchSvc, cfg.serviceToken).RegisterRoutes(mux)
policy := cfg.policyClient()
if policy == nil {
log.Print("ai-app: WARNUNG: Rechtepruefung ai.search.read deaktiviert (NEXARCH_AI_APP_POLICY_DISABLED=1)")
}
semanticsearchapi.NewServer(searchSvc, cfg.serviceToken).WithPolicy(policy).RegisterRoutes(mux)
chunkStore := vectorindex.New(pool)
docchatapi.NewServer(
@@ -177,6 +202,9 @@ func build(pool *pgxpool.Pool, cfg config, prov provider.Provider, workerID stri
return wiring{mux: mux, queue: q, worker: worker, quotaStore: quotaStore}
}
// Muss ueber dem Provider-Timeout (120s) liegen, sonst kappt der Server langsame Inferenz-Antworten.
const serverWriteTimeout = 130 * time.Second
func main() {
cfg, err := loadConfig(os.Getenv)
if err != nil {
@@ -201,7 +229,7 @@ func main() {
Handler: w.mux,
ReadHeaderTimeout: 5 * time.Second,
ReadTimeout: 15 * time.Second,
WriteTimeout: 15 * time.Second,
WriteTimeout: serverWriteTimeout,
IdleTimeout: 60 * time.Second,
}
+49 -2
View File
@@ -17,7 +17,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider/mock"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/queue"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
// AK3 + AK4: eine fehlende Pflicht-Umgebungsvariable liefert einen klaren
@@ -44,10 +44,36 @@ func TestLoadConfig_MissingRequiredVars(t *testing.T) {
}
}
func TestLoadConfig_Defaults(t *testing.T) {
// Issue #369: Policy-URL ohne Service-Token darf nicht still ohne
// Rechtepruefung starten.
func TestLoadConfig_PolicyURLRequiresServiceToken(t *testing.T) {
env := map[string]string{
"NEXARCH_AI_APP_TENANT_DSN": "postgres://x",
"NEXARCH_AI_APP_SERVICE_TOKEN": "tok",
"NEXARCH_AI_APP_POLICY_URL": "http://127.0.0.1:8093",
}
get := func(k string) string { return env[k] }
if _, err := loadConfig(get); err == nil || !strings.Contains(err.Error(), "NEXARCH_AI_APP_POLICY_SERVICE_TOKEN") {
t.Fatalf("erwartete fehler zur fehlenden NEXARCH_AI_APP_POLICY_SERVICE_TOKEN, bekam %v", err)
}
env["NEXARCH_AI_APP_POLICY_SERVICE_TOKEN"] = "policy-tok"
cfg, err := loadConfig(get)
if err != nil {
t.Fatalf("unerwarteter fehler: %v", err)
}
if cfg.policyClient() == nil {
t.Fatal("policy-client muss bei gesetzter URL aktiv sein")
}
if (config{}).policyClient() != nil {
t.Fatal("ohne URL darf kein policy-client entstehen")
}
}
func TestLoadConfig_Defaults(t *testing.T) {
env := map[string]string{
"NEXARCH_AI_APP_TENANT_DSN": "postgres://x",
"NEXARCH_AI_APP_SERVICE_TOKEN": "tok",
"NEXARCH_AI_APP_POLICY_DISABLED": "1",
}
cfg, err := loadConfig(func(k string) string { return env[k] })
if err != nil {
@@ -61,6 +87,12 @@ func TestLoadConfig_Defaults(t *testing.T) {
}
}
func TestServerWriteTimeoutCoversProviderTimeout(t *testing.T) {
if serverWriteTimeout <= 120*time.Second {
t.Fatalf("serverWriteTimeout = %v, muss ueber dem Provider-Timeout von 120s liegen", serverWriteTimeout)
}
}
func newTestPool(t *testing.T) *pgxpool.Pool {
t.Helper()
dsn := os.Getenv("TEST_TENANT_DSN")
@@ -184,3 +216,18 @@ func TestBuild_QueueWorkerProcessesJobWithQuota(t *testing.T) {
t.Errorf("quota-zaehlerstand = %d, want 1 (GOV-04-Verbrauchszaehlung nicht verdrahtet)", value)
}
}
func TestLoadConfig_PolicyRequiredUnlessDisabled(t *testing.T) {
env := map[string]string{
"NEXARCH_AI_APP_TENANT_DSN": "postgres://x",
"NEXARCH_AI_APP_SERVICE_TOKEN": "tok",
}
get := func(k string) string { return env[k] }
if _, err := loadConfig(get); err == nil || !strings.Contains(err.Error(), "NEXARCH_AI_APP_POLICY_URL") {
t.Fatalf("erwartete fehler zur fehlenden NEXARCH_AI_APP_POLICY_URL, bekam %v", err)
}
env["NEXARCH_AI_APP_POLICY_DISABLED"] = "1"
if _, err := loadConfig(get); err != nil {
t.Fatalf("mit POLICY_DISABLED=1 darf der Start nicht scheitern: %v", err)
}
}
+2 -1
View File
@@ -19,7 +19,7 @@ import (
)
const (
fixtureTenant = "beispiel-mandant"
fixtureTenant = "beispiel-mandant"
fixtureSourceType = "dms_document"
fixtureSourceID = "beispiel-dokument-1"
)
@@ -77,5 +77,6 @@ func main() {
docchatapi.NewServer(chatSvc, "test-token").RegisterRoutes(mux)
log.Println("searchchatapi-mockserver listening on 127.0.0.1:19603")
// archtest:allow Einmaliges lokales pa11y-Testwerkzeug, kein Produktdienst
log.Fatal(http.ListenAndServe("127.0.0.1:19603", mux))
}
+4 -1
View File
@@ -4,7 +4,10 @@ go 1.25.0
toolchain go1.25.13
require github.com/jackc/pgx/v5 v5.11.0
require (
gitea.perlbach24.de/scripte/nexarch/common v0.2.0
github.com/jackc/pgx/v5 v5.11.0
)
require (
github.com/jackc/pgpassfile v1.0.0 // indirect
+2
View File
@@ -1,3 +1,5 @@
gitea.perlbach24.de/scripte/nexarch/common v0.2.0 h1:gcOjoOvUkT0Zmqq3m7WQp1MfXSgmzrGTF2E/+NkO2bw=
gitea.perlbach24.de/scripte/nexarch/common v0.2.0/go.mod h1:CiEImG++QMt1xZqSMeDJhPiB7sfWTLZOwjS6OY/Iguc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-72
View File
@@ -1,72 +0,0 @@
// Package auditclient ist ein schlanker HTTP-Client fuer Core AUD-08
// (internal/audit, POST /audit/ingest). AI ist ein physisch getrenntes
// Go-Modul und kann Cores internal/audit daher nicht direkt importieren -
// nur ueber dessen HTTP-Schnittstelle. Gleiches Muster wie
// connect/internal/auditclient (ENG-06) und archive/internal/auditclient.
package auditclient
import (
"bytes"
"context"
"encoding/json"
"fmt"
"net/http"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/httpclient"
)
type Client struct {
BaseURL string
ServiceToken string
HTTPClient *http.Client
}
func New(baseURL, serviceToken string) *Client {
return &Client{BaseURL: baseURL, ServiceToken: serviceToken, HTTPClient: httpclient.Default()}
}
type ingestRequest struct {
TenantSlug string `json:"tenant_slug"`
Actor string `json:"actor"`
Action string `json:"action"`
Target string `json:"target"`
Metadata map[string]any `json:"metadata"`
}
// Ingest meldet EIN Audit-Ereignis an Core. Absichtlich keine
// Update-/Delete-Methode: der Ingest-Endpunkt (AUD-08) ruft denselben
// alleinigen, anfuegenden Schreibpfad wie core-interne Aufrufer auf
// (audit.Log.Record), gegen den Core selbst per Datenbank-Trigger jede
// nachtraegliche Aenderung/Loeschung verweigert (AUD-02).
func (c *Client) Ingest(ctx context.Context, tenantSlug, actor, action, target string, metadata map[string]any) error {
body, err := json.Marshal(ingestRequest{
TenantSlug: tenantSlug, Actor: actor, Action: action, Target: target, Metadata: metadata,
})
if err != nil {
return fmt.Errorf("auditclient: request kodieren: %w", err)
}
req, err := http.NewRequestWithContext(ctx, http.MethodPost, c.BaseURL+"/audit/ingest", bytes.NewReader(body))
if err != nil {
return fmt.Errorf("auditclient: request bauen: %w", err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Service-Token", c.ServiceToken)
resp, err := c.httpClient().Do(req)
if err != nil {
return fmt.Errorf("auditclient: aufruf fehlgeschlagen: %w", err)
}
defer func() { _ = resp.Body.Close() }()
if resp.StatusCode != http.StatusAccepted {
return fmt.Errorf("auditclient: unerwarteter status %d", resp.StatusCode)
}
return nil
}
func (c *Client) httpClient() *http.Client {
if c.HTTPClient != nil {
return c.HTTPClient
}
return httpclient.Default()
}
@@ -1,48 +0,0 @@
package auditclient
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
)
func TestIngest_SendsExpectedRequest(t *testing.T) {
var gotToken string
var gotBody ingestRequest
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
gotToken = r.Header.Get("X-Service-Token")
_ = json.NewDecoder(r.Body).Decode(&gotBody)
w.WriteHeader(http.StatusAccepted)
}))
defer srv.Close()
c := New(srv.URL, "test-token")
err := c.Ingest(context.Background(), "tenant_a", "svc:ai", "ai.decision.classify", "doc:1",
map[string]any{"model": "llama3", "prompt_version": 2})
if err != nil {
t.Fatalf("Ingest: %v", err)
}
if gotToken != "test-token" {
t.Errorf("token = %q, want test-token", gotToken)
}
if gotBody.Action != "ai.decision.classify" || gotBody.Target != "doc:1" {
t.Errorf("unerwarteter request: %+v", gotBody)
}
if gotBody.Metadata["model"] != "llama3" {
t.Errorf("metadata.model = %v, want llama3", gotBody.Metadata["model"])
}
}
func TestIngest_UnexpectedStatusIsError(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
http.Error(w, "zugriff verweigert", http.StatusForbidden)
}))
defer srv.Close()
c := New(srv.URL, "test-token")
if err := c.Ingest(context.Background(), "tenant_a", "svc:ai", "ai.decision.classify", "doc:1", nil); err == nil {
t.Fatal("erwartet fehler bei status 403, habe nil")
}
}
+1 -1
View File
@@ -9,11 +9,11 @@ import (
"strings"
"testing"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/auditclient"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/decisionaudit"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider/mock"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider/ollama"
"gitea.perlbach24.de/scripte/nexarch/common/auditclient"
)
var testSchema = Schema{Categories: []string{"rechnung", "vertrag", "kuendigung"}}
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"testing"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newStore(t *testing.T) *Store {
@@ -9,7 +9,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/moduletype"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
// --- Vertrag 1: GOV-01 registrierter Objekttyp (moduletype.ObjectType) ---
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"testing"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newRecorder(t *testing.T) *Recorder {
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"context"
"fmt"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/auditclient"
"gitea.perlbach24.de/scripte/nexarch/common/auditclient"
)
// Decision ist eine einzelne, abgeschlossene KI-gestuetzte Entscheidung
@@ -7,7 +7,7 @@ import (
"net/http/httptest"
"testing"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/auditclient"
"gitea.perlbach24.de/scripte/nexarch/common/auditclient"
)
type recordedRequest struct {
@@ -7,10 +7,10 @@ import (
"testing"
"time"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/loadtest"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider/ollama"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/semanticsearch"
"gitea.perlbach24.de/scripte/nexarch/common/loadtest"
)
// QA-08 Pruefung 1 (AK1): echte parallele Chat-Anfragen gegen den realen,
+1 -1
View File
@@ -12,8 +12,8 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/docchat"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/semanticsearch"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/vectorindex"
"gitea.perlbach24.de/scripte/nexarch/common/svcauth"
)
type Server struct {
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/classify"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
"github.com/jackc/pgx/v5/pgxpool"
)
+1 -1
View File
@@ -14,7 +14,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/queue"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newPool(t *testing.T) *pgxpool.Pool {
+1 -1
View File
@@ -15,7 +15,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/extractvalidate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/invoiceextract"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/common/svcauth"
)
type Server struct {
@@ -15,7 +15,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/extractmapping"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/metadatapushclient"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/common/svcauth"
)
type Server struct {
@@ -13,7 +13,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/extractmapping"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/metadatapushclient"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newMappingRegistry(t *testing.T) *extractmapping.Registry {
@@ -10,7 +10,7 @@ import (
"testing"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newRegistry(t *testing.T) *Registry {
@@ -1,10 +1,10 @@
// Package qa03gate ist das Prüfgate für QA-03: misst Klassifizierungs- und
// Package classification ist das Prüfgate für QA-03: misst Klassifizierungs- und
// Extraktionsgenauigkeit am Referenzkorpus (QA-01, ai/internal/refcorpus)
// und belegt die Wirkung von Korrektur-Feedback auf künftige Vorschläge.
// Reines Prüfgate — ruft nur bestehende, bereits gemergte Pakete auf
// (classify CLS-02, extract EXT-05-Grundlage, correction/historysuggest
// CLS-05), ohne deren Code zu ändern.
package qa03gate
package classification
import (
"context"
@@ -1,9 +1,9 @@
// Package qa05gate ist das Prüfgate für QA-05 (Datenschutz- &
// Package governance ist das Prüfgate für QA-05 (Datenschutz- &
// Governance-Prüfung). Es bringt keine neue Fachlogik ein, sondern führt
// GOV-02/GOV-03/GOV-05 end-to-end gegen eine echte Postgres-Wegwerf-DB bzw.
// einen Mock-Core zusammen, um die drei QA-05-Akzeptanzkriterien in der
// Praxis (nicht nur auf Store-Ebene) nachzuweisen.
package qa05gate
package governance
import (
"context"
@@ -16,7 +16,6 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/auditclient"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/decisionaudit"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider"
@@ -24,7 +23,8 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider/openai"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/residency"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/tenantfeature"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/auditclient"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
// realPool liefert einen frischen, migrierten Pool auf der Wegwerf-DB aus
@@ -36,7 +36,7 @@ func realPool(t *testing.T) *pgxpool.Pool {
t.Skip("TEST_TENANT_DSN nicht gesetzt, Integrationstest übersprungen")
}
pool := testdb.Pool(t, dsn)
migrationsDir, err := filepath.Abs("../../migrations")
migrationsDir, err := filepath.Abs("../../../migrations")
if err != nil {
t.Fatalf("migrationsverzeichnis: %v", err)
}
@@ -1,4 +1,4 @@
// Package qa04gate ist das Prüfgate für QA-04: es misst Suchqualität,
// Package searchquality ist das Prüfgate für QA-04: es misst Suchqualität,
// RAG-Antwortgüte und Quellenverweis-Nachvollziehbarkeit auf einem festen,
// synthetischen Testkorpus (SEM-01..06 bereits gemergt) und ändert keines der
// geprüften Pakete. Der Korpus stammt aus refcorpus (QA-01), die "Einbettung"
@@ -7,7 +7,7 @@
// einem externen Modell abhängt. Reine Termfrequenz ohne IDF-Gewichtung wurde
// probiert und verworfen: seltene, fachlich entscheidende Wörter (z.B.
// "Gesamtbetrag") gingen gegen häufige, generische Wörter unter.
package qa04gate
package searchquality
import (
"context"
@@ -231,4 +231,3 @@ func (p *embedProvider) Chat(ctx context.Context, req provider.ChatRequest) (pro
func (p *embedProvider) Complete(ctx context.Context, req provider.CompletionRequest) (provider.CompletionResponse, error) {
return provider.CompletionResponse{}, errors.New("qa04gate: Complete wird vom Prüfgate nicht genutzt")
}
@@ -1,4 +1,4 @@
package qa04gate
package searchquality
import (
"context"
@@ -1,4 +1,4 @@
package qa04gate
package searchquality
// testQuestion ist eine feste Testfrage des QA-04-Prüfgates gegen den
// refcorpus-Testkorpus (QA-01). erwarteteSourceID ist leer, wenn die Frage
-25
View File
@@ -1,25 +0,0 @@
// Package httpclient liefert den HTTP-Client fuer ausgehende Dienstaufrufe
// (Kopie des Musters aus connect/internal/httpclient, ENG-06): Zeitlimit
// statt endlosem Warten, keine Weiterleitungen (ein Service-Token wuerde
// sonst an das Weiterleitungsziel mitgesendet).
package httpclient
import (
"net/http"
"time"
)
const DefaultTimeout = 15 * time.Second
var shared = New(DefaultTimeout)
func Default() *http.Client { return shared }
func New(timeout time.Duration) *http.Client {
return &http.Client{
Timeout: timeout,
CheckRedirect: func(*http.Request, []*http.Request) error {
return http.ErrUseLastResponse
},
}
}
-29
View File
@@ -1,29 +0,0 @@
package httpclient
import (
"net/http"
"net/http/httptest"
"testing"
)
func TestNew_DoesNotFollowRedirects(t *testing.T) {
target := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
t.Fatal("weiterleitungsziel haette nie erreicht werden duerfen")
}))
defer target.Close()
redirector := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, target.URL, http.StatusFound)
}))
defer redirector.Close()
resp, err := Default().Get(redirector.URL)
if err != nil {
t.Fatalf("Get: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusFound {
t.Fatalf("status = %d, want %d (keine weiterleitung gefolgt)", resp.StatusCode, http.StatusFound)
}
}
-138
View File
@@ -1,138 +0,0 @@
// Package loadtest implementiert die fuer QA-07/QA-08 gemeinsam genutzte
// Last- und Leistungsmessung: parallele Sessions ausfuehren, Latenzen
// aufzeichnen, Durchsatz bestimmen. k6/vegeta sind auf diesem Rechner nicht
// installierbar (Projektregel: keine zusaetzlichen Toolchains/Dienste
// installieren) — echter Ersatz ohne externe Abhaengigkeit: reale
// nebenlaeufige Aufrufe ueber die Go-Standardbibliothek, gegen den echten,
// in dieser Sitzung gebauten Code. Eigenstaendige Kopie aus
// mail/internal/loadtest, da Go-Module keine internal/-Pakete teilen.
package loadtest
import (
"context"
"os"
"runtime"
"sort"
"strconv"
"strings"
"sync"
"time"
)
// Result fasst Latenz- und Durchsatzwerte eines Lasttest-Laufs zusammen.
type Result struct {
Protocol string
Concurrency int
Sessions int
Errors int
Duration time.Duration
Latencies []time.Duration // aufsteigend sortiert
}
// Throughput liefert Sessions pro Sekunde über die Gesamtlaufzeit.
func (r Result) Throughput() float64 {
if r.Duration <= 0 {
return 0
}
return float64(r.Sessions) / r.Duration.Seconds()
}
// Percentile liefert die Latenz am p-ten Perzentil (0.0–1.0).
func (r Result) Percentile(p float64) time.Duration {
if len(r.Latencies) == 0 {
return 0
}
idx := int(p * float64(len(r.Latencies)-1))
if idx < 0 {
idx = 0
}
if idx >= len(r.Latencies) {
idx = len(r.Latencies) - 1
}
return r.Latencies[idx]
}
// Max liefert die höchste gemessene Latenz.
func (r Result) Max() time.Duration {
if len(r.Latencies) == 0 {
return 0
}
return r.Latencies[len(r.Latencies)-1]
}
// Run führt totalSessions Sessions über maximal concurrency parallele
// Worker aus und misst je Session die Latenz von sessionFunc.
func Run(ctx context.Context, protocol string, concurrency, totalSessions int, sessionFunc func(ctx context.Context) error) Result {
var mu sync.Mutex
latencies := make([]time.Duration, 0, totalSessions)
errCount := 0
sem := make(chan struct{}, concurrency)
var wg sync.WaitGroup
start := time.Now()
for i := 0; i < totalSessions; i++ {
sem <- struct{}{}
wg.Add(1)
go func() {
defer wg.Done()
defer func() { <-sem }()
t0 := time.Now()
err := sessionFunc(ctx)
elapsed := time.Since(t0)
mu.Lock()
latencies = append(latencies, elapsed)
if err != nil {
errCount++
}
mu.Unlock()
}()
}
wg.Wait()
duration := time.Since(start)
sort.Slice(latencies, func(i, j int) bool { return latencies[i] < latencies[j] })
return Result{
Protocol: protocol,
Concurrency: concurrency,
Sessions: totalSessions,
Errors: errCount,
Duration: duration,
Latencies: latencies,
}
}
// ResourceSample ist eine Momentaufnahme des Ressourcenverbrauchs DIESES
// Prozesses: Heap über die Go-Runtime, kumulierte CPU-Zeit über
// /proc/self/stat (Linux, kein externes Werkzeug nötig).
type ResourceSample struct {
HeapAllocBytes uint64
CPUTimeSeconds float64
}
func SampleResources() ResourceSample {
var m runtime.MemStats
runtime.ReadMemStats(&m)
return ResourceSample{HeapAllocBytes: m.HeapAlloc, CPUTimeSeconds: readSelfCPUTimeSeconds()}
}
// readSelfCPUTimeSeconds liefert die kumulierte User+System-CPU-Zeit dieses
// Prozesses in Sekunden. Liefert 0, wenn /proc/self/stat nicht lesbar ist
// (z. B. auf Nicht-Linux-Systemen) — Aufrufer behandeln das als "keine
// CPU-Messung verfügbar", kein harter Fehler.
func readSelfCPUTimeSeconds() float64 {
data, err := os.ReadFile("/proc/self/stat")
if err != nil {
return 0
}
fields := strings.Fields(string(data))
if len(fields) < 15 {
return 0
}
utime, err1 := strconv.ParseFloat(fields[13], 64)
stime, err2 := strconv.ParseFloat(fields[14], 64)
if err1 != nil || err2 != nil {
return 0
}
const clockTicksPerSecond = 100 // Linux-Standard-USER_HZ
return (utime + stime) / clockTicksPerSecond
}
@@ -15,7 +15,7 @@ import (
"net/url"
"sort"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/httpclient"
"gitea.perlbach24.de/scripte/nexarch/common/httpclient"
)
type Client struct {
@@ -81,7 +81,7 @@ func TestPush_UnknownFieldKey_ReportedNotDropped(t *testing.T) {
c := New(srv.URL, "svc-token-123")
result, err := c.Push(context.Background(), "doc-1", "ai", map[string]string{
"rechnungsdatum": "2026-01-15",
"rechnungsdatum": "2026-01-15",
"nicht_existent_feld": "wert",
})
if err != nil {
+11 -205
View File
@@ -1,221 +1,27 @@
// Package migrate implements versioned, revertible SQL migrations (no ORM) — a
// standalone copy of the Core/DMS pattern, since AI is its own Go module
// and cannot import other modules' internal/ packages.
// Package migrate bindet die gemeinsame Migrationslogik aus common an den
// modulspezifischen Fortschrittstabellennamen.
package migrate
import (
"context"
"fmt"
"os"
"path/filepath"
"sort"
"strings"
"github.com/jackc/pgx/v5/pgxpool"
cmigrate "gitea.perlbach24.de/scripte/nexarch/common/migrate"
)
// Migration ist eine einzelne versionierte Migrationsdatei.
type Migration struct {
Version string // Dateiname ohne .up.sql/.down.sql, z.B. "0001_documents"
UpSQL string
DownSQL string
}
type Migration = cmigrate.Migration
// Load liest alle *.up.sql/*.down.sql-Paare aus dir, sortiert nach
// Dateiname (Akzeptanzkriterium: Migrationen sind versioniert).
func Load(dir string) ([]Migration, error) {
entries, err := os.ReadDir(dir)
if err != nil {
return nil, fmt.Errorf("migrationsverzeichnis %q lesen: %w", dir, err)
}
var versions []string
for _, e := range entries {
if e.IsDir() || !strings.HasSuffix(e.Name(), ".up.sql") {
continue
}
versions = append(versions, strings.TrimSuffix(e.Name(), ".up.sql"))
}
sort.Strings(versions)
migrations := make([]Migration, 0, len(versions))
for _, v := range versions {
up, err := os.ReadFile(filepath.Join(dir, v+".up.sql"))
if err != nil {
return nil, fmt.Errorf("migration %q: up.sql lesen: %w", v, err)
}
down, err := os.ReadFile(filepath.Join(dir, v+".down.sql"))
if err != nil {
return nil, fmt.Errorf("migration %q: down.sql lesen (jede Migration braucht ein Rollback): %w", v, err)
}
migrations = append(migrations, Migration{Version: v, UpSQL: string(up), DownSQL: string(down)})
}
return migrations, nil
}
// TrackingTable ist modulspezifisch benannt, damit sich Module in
// derselben Datenbank/demselben Schema nicht gegenseitig den
// Migrationsfortschritt ueberschreiben (FDN-13).
const TrackingTable = "connect_schema_migrations"
const legacyTrackingTable = "schema_migrations"
var migrator = cmigrate.MustNew(TrackingTable)
// ensureTrackingTable legt TrackingTable an. Beim erstmaligen Anlegen wird
// ein vorhandener Bestand aus der frueheren, unqualifizierten
// schema_migrations uebernommen (nur Versionen, die dieses Modul kennt, und
// nur wenn dessen Basisversion dort steht — eine schema_migrations eines
// anderen Moduls oder eines anderen Schemas wird weder gelesen noch
// veraendert). Die alte Tabelle
// bleibt unangetastet.
func ensureTrackingTable(ctx context.Context, pool *pgxpool.Pool, migrations []Migration) error {
tx, err := pool.Begin(ctx)
if err != nil {
return fmt.Errorf("%s anlegen: %w", TrackingTable, err)
}
defer func() { _ = tx.Rollback(ctx) }()
func Load(dir string) ([]Migration, error) { return cmigrate.Load(dir) }
// Serialisiert gleichzeitige Erstanlage/Uebernahme (mehrere App-Instanzen).
if _, err := tx.Exec(ctx, `SELECT pg_advisory_xact_lock(hashtext('connect_schema_migrations'))`); err != nil {
return fmt.Errorf("%s anlegen: %w", TrackingTable, err)
}
var existed bool
if err := tx.QueryRow(ctx, `SELECT to_regclass(current_schema() || '.' || $1::text) IS NOT NULL`, TrackingTable).Scan(&existed); err != nil {
return fmt.Errorf("%s anlegen: %w", TrackingTable, err)
}
if existed {
return tx.Commit(ctx)
}
if _, err := tx.Exec(ctx, `
CREATE TABLE `+TrackingTable+` (
version TEXT PRIMARY KEY,
applied_at TIMESTAMPTZ NOT NULL DEFAULT now()
)
`); err != nil {
return fmt.Errorf("%s anlegen: %w", TrackingTable, err)
}
if len(migrations) > 0 {
var legacy bool
if err := tx.QueryRow(ctx, `SELECT to_regclass(current_schema() || '.' || $1::text) IS NOT NULL`, legacyTrackingTable).Scan(&legacy); err != nil {
return fmt.Errorf("%s pruefen: %w", legacyTrackingTable, err)
}
if legacy {
versions := make([]string, len(migrations))
for i, m := range migrations {
versions[i] = m.Version
}
var hasBase bool
if err := tx.QueryRow(ctx,
`SELECT EXISTS (SELECT 1 FROM `+legacyTrackingTable+` WHERE version = $1)`, versions[0],
).Scan(&hasBase); err != nil {
return fmt.Errorf("%s lesen: %w", legacyTrackingTable, err)
}
if hasBase {
if _, err := tx.Exec(ctx, `
INSERT INTO `+TrackingTable+` (version, applied_at)
SELECT version, applied_at FROM `+legacyTrackingTable+` WHERE version = ANY($1)
`, versions); err != nil {
return fmt.Errorf("bestand aus %s uebernehmen: %w", legacyTrackingTable, err)
}
}
}
}
return tx.Commit(ctx)
func Up(ctx context.Context, pool *pgxpool.Pool, migrations []Migration) ([]string, error) {
return migrator.Up(ctx, pool, migrations)
}
func appliedVersions(ctx context.Context, pool *pgxpool.Pool) (map[string]bool, error) {
rows, err := pool.Query(ctx, `SELECT version FROM `+TrackingTable)
if err != nil {
return nil, fmt.Errorf("angewendete migrationen lesen: %w", err)
}
defer rows.Close()
applied := map[string]bool{}
for rows.Next() {
var v string
if err := rows.Scan(&v); err != nil {
return nil, fmt.Errorf("migrationsversion lesen: %w", err)
}
applied[v] = true
}
return applied, rows.Err()
}
// Up wendet alle noch nicht angewendeten Migrationen in Reihenfolge an
// (Akzeptanzkriterium 2: vorwaerts ausfuehrbar) — bereits angewendete
// werden uebersprungen, damit Up auf einer leeren UND auf einer bestehenden
// DB funktioniert (Pruefung 1).
func Up(ctx context.Context, pool *pgxpool.Pool, migrations []Migration) (applied []string, err error) {
if err := ensureTrackingTable(ctx, pool, migrations); err != nil {
return nil, err
}
already, err := appliedVersions(ctx, pool)
if err != nil {
return nil, err
}
for _, m := range migrations {
if already[m.Version] {
continue
}
tx, err := pool.Begin(ctx)
if err != nil {
return applied, fmt.Errorf("transaktion fuer %q starten: %w", m.Version, err)
}
if _, err := tx.Exec(ctx, m.UpSQL); err != nil {
_ = tx.Rollback(ctx)
return applied, fmt.Errorf("migration %q anwenden: %w", m.Version, err)
}
if _, err := tx.Exec(ctx, `INSERT INTO `+TrackingTable+` (version) VALUES ($1)`, m.Version); err != nil {
_ = tx.Rollback(ctx)
return applied, fmt.Errorf("migration %q als angewendet markieren: %w", m.Version, err)
}
if err := tx.Commit(ctx); err != nil {
return applied, fmt.Errorf("migration %q committen: %w", m.Version, err)
}
applied = append(applied, m.Version)
}
return applied, nil
}
// DownOne macht die zuletzt angewendete Migration rueckgaengig
// (Akzeptanzkriterium 2: rueckwaerts ausfuehrbar) und liefert deren Version,
// oder "" falls keine Migration angewendet war.
func DownOne(ctx context.Context, pool *pgxpool.Pool, migrations []Migration) (version string, err error) {
if err := ensureTrackingTable(ctx, pool, migrations); err != nil {
return "", err
}
already, err := appliedVersions(ctx, pool)
if err != nil {
return "", err
}
var last *Migration
for i := len(migrations) - 1; i >= 0; i-- {
if already[migrations[i].Version] {
last = &migrations[i]
break
}
}
if last == nil {
return "", nil
}
tx, err := pool.Begin(ctx)
if err != nil {
return "", fmt.Errorf("transaktion fuer rollback von %q starten: %w", last.Version, err)
}
if _, err := tx.Exec(ctx, last.DownSQL); err != nil {
_ = tx.Rollback(ctx)
return "", fmt.Errorf("migration %q zurueckrollen: %w", last.Version, err)
}
if _, err := tx.Exec(ctx, `DELETE FROM `+TrackingTable+` WHERE version = $1`, last.Version); err != nil {
_ = tx.Rollback(ctx)
return "", fmt.Errorf("migration %q aus %s entfernen: %w", last.Version, TrackingTable, err)
}
if err := tx.Commit(ctx); err != nil {
return "", fmt.Errorf("rollback von %q committen: %w", last.Version, err)
}
return last.Version, nil
func DownOne(ctx context.Context, pool *pgxpool.Pool, migrations []Migration) (string, error) {
return migrator.DownOne(ctx, pool, migrations)
}
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/modelconfig"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
type fakeLister struct {
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"testing"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
// fakeVerifier simuliert Core TEN-01 fuer die Registry-Tests, ohne einen
+1 -1
View File
@@ -10,7 +10,7 @@ import (
"net/http"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/moduletype"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/common/svcauth"
)
type Server struct {
@@ -12,7 +12,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/moduletype"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
type fakeVerifier struct{ validTenants map[string]bool }
-1
View File
@@ -17,7 +17,6 @@ import (
// sensitivePathPatterns beschreibt die Bereiche aus
// TESTSTRATEGIE-AI.md Abschnitt 3.
var sensitivePathPatterns = []*regexp.Regexp{
regexp.MustCompile(`(^|/)ai/internal/svcauth/`),
regexp.MustCompile(`(^|/)ai/internal/tenantfeature/`),
regexp.MustCompile(`(^|/)ai/internal/semanticsearch/`),
regexp.MustCompile(`(^|/)ai/internal/semanticsearchapi/`),
+5 -5
View File
@@ -1,24 +1,24 @@
// Negativtest des Gates selbst (QA-01 Prüfung 1): ein Diff mit
// geänderter ai/internal/svcauth/svcauth.go ohne begleitende Testdatei
// geänderter ai/internal/tenantfeature/tenantfeature.go ohne begleitende Testdatei
// muss als Verstoß erkannt werden.
package pflichttestgate
import "testing"
func TestCheckDiff_FlagsSensitiveChangeWithoutTest(t *testing.T) {
violations := CheckDiff([]string{"ai/internal/svcauth/svcauth.go"})
violations := CheckDiff([]string{"ai/internal/tenantfeature/tenantfeature.go"})
if len(violations) != 1 {
t.Fatalf("erwartet genau 1 verstoß, habe %d: %+v", len(violations), violations)
}
if violations[0].Package != "ai/internal/svcauth" {
if violations[0].Package != "ai/internal/tenantfeature" {
t.Fatalf("falsches package gemeldet: %+v", violations[0])
}
}
func TestCheckDiff_PassesWhenTestFileAccompanies(t *testing.T) {
violations := CheckDiff([]string{
"ai/internal/svcauth/svcauth.go",
"ai/internal/svcauth/svcauth_test.go",
"ai/internal/tenantfeature/tenantfeature.go",
"ai/internal/tenantfeature/tenantfeature_test.go",
})
if len(violations) != 0 {
t.Fatalf("erwartet keine verstöße, habe: %+v", violations)
+1 -1
View File
@@ -9,7 +9,7 @@ import (
"testing"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newStore(t *testing.T) *Store {
+1 -1
View File
@@ -8,8 +8,8 @@ import (
"time"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/limits"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/loadtest"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider"
"gitea.perlbach24.de/scripte/nexarch/common/loadtest"
)
// QA-08 Pruefung 2 (AK2): realistische parallele Klassifizierungs-/
+1 -1
View File
@@ -14,7 +14,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newPool(t *testing.T) *pgxpool.Pool {
+3 -3
View File
@@ -16,9 +16,9 @@ import (
// eine Zeitueberschreitung real simulieren laesst (respektiert ctx wie ein
// echter HTTP-Client es tun wuerde).
type slowProvider struct {
delay time.Duration
calls atomic.Int64
cancelled atomic.Int64
delay time.Duration
calls atomic.Int64
cancelled atomic.Int64
}
func (s *slowProvider) Chat(ctx context.Context, req provider.ChatRequest) (provider.ChatResponse, error) {
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newPool(t *testing.T) *pgxpool.Pool {
+1 -1
View File
@@ -9,7 +9,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/provider/openai"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/residency"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func setup(t *testing.T) *residency.Store {
+1 -1
View File
@@ -9,7 +9,7 @@ import (
"net/http"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/residency"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/common/svcauth"
)
type Server struct {
@@ -13,7 +13,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/residency"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/residencyapi"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
const testToken = "test-service-token"
@@ -8,7 +8,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/historysuggest"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newStore(t *testing.T) *Store {
@@ -13,7 +13,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/historysuggest"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/routingfeedback"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/common/svcauth"
)
type Server struct {
@@ -11,7 +11,7 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/routingfeedback"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
const testToken = "test-service-token"
@@ -11,8 +11,8 @@ import (
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/semanticsearch"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/vectorindex"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newRealPool(t *testing.T) *pgxpool.Pool {
@@ -1,7 +1,8 @@
// Package semanticsearchapi ist die HTTP-Bindung der semantischen Suche
// (SEM-03). Aufrufer ist das anfragende Modul (DMS/Mail), nicht der
// Endnutzer direkt — Service-Token-Pflicht wie moduleadapter (Workflow
// ENG-02), fail closed.
// ENG-02), fail closed. Zusaetzlich (Issue #369) Rechtepruefung
// ai.search.read gegen Core fuer den Mandanten aus dem Anfrage-Koerper.
package semanticsearchapi
import (
@@ -10,18 +11,30 @@ import (
"net/http"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/semanticsearch"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/common/policyclient"
"gitea.perlbach24.de/scripte/nexarch/common/svcauth"
)
const permissionSearchRead = "ai.search.read"
type Server struct {
svc *semanticsearch.Service
serviceToken string
policy *policyclient.Client
}
func NewServer(svc *semanticsearch.Service, serviceToken string) *Server {
return &Server{svc: svc, serviceToken: serviceToken}
}
// WithPolicy aktiviert die Rechtepruefung gegen Core (POST /authorize).
// Rolle ist fest "user", weil der Modul-zu-Modul-Aufruf keine Nutzerrolle
// transportiert (Uebergang, gleiches Muster wie connect/internal/statusapi).
func (s *Server) WithPolicy(client *policyclient.Client) *Server {
s.policy = client
return s
}
func (s *Server) RegisterRoutes(mux *http.ServeMux) {
mux.HandleFunc("POST /search", s.requireAuth(s.handleSearch))
}
@@ -37,6 +50,22 @@ func (s *Server) requireAuth(next http.HandlerFunc) http.HandlerFunc {
}
}
func (s *Server) permitted(w http.ResponseWriter, r *http.Request, tenantSlug, permission string) bool {
if s.policy == nil {
return true
}
allowed, err := s.policy.Allowed(r.Context(), tenantSlug, "user", permission)
if err != nil {
writeError(w, http.StatusServiceUnavailable, "berechtigungsdienst nicht erreichbar")
return false
}
if !allowed {
writeError(w, http.StatusForbidden, "keine berechtigung")
return false
}
return true
}
type refRequest struct {
SourceType string `json:"source_type"`
SourceID string `json:"source_id"`
@@ -59,6 +88,9 @@ func (s *Server) handleSearch(w http.ResponseWriter, r *http.Request) {
writeError(w, http.StatusBadRequest, "ungueltiger anfrage-koerper")
return
}
if !s.permitted(w, r, req.TenantSlug, permissionSearchRead) {
return
}
refs := make([]semanticsearch.Ref, 0, len(req.AllowedRefs))
for _, ref := range req.AllowedRefs {
@@ -0,0 +1,100 @@
package semanticsearchapi_test
import (
"bytes"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"gitea.perlbach24.de/scripte/nexarch/common/policyclient"
)
// Steht fuer Core's POST /authorize-Vertrag ({"allowed": bool}); prueft
// die echte Kette requireAuth -> permitted -> policyclient -> 403/200.
func newFakePolicyAPI(t *testing.T, allow bool, gotBody *map[string]string) *httptest.Server {
t.Helper()
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/authorize" || r.Header.Get("X-Service-Token") == "" {
t.Fatalf("unerwartete anfrage: %s %s", r.Method, r.URL.Path)
}
if gotBody != nil {
_ = json.NewDecoder(r.Body).Decode(gotBody)
}
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(map[string]bool{"allowed": allow})
}))
}
func searchRequest(t *testing.T) *http.Request {
t.Helper()
body, _ := json.Marshal(map[string]any{
"tenant_slug": "acme",
"query": "test",
"top_k": 5,
"allowed_refs": []map[string]string{{"source_type": "dms_document", "source_id": "doc-1"}},
})
req := httptest.NewRequest(http.MethodPost, "/search", bytes.NewReader(body))
req.Header.Set("X-Service-Token", "geheimes-token")
return req
}
func TestHandleSearch_PolicyDenies_Rejected(t *testing.T) {
var got map[string]string
policyAPI := newFakePolicyAPI(t, false, &got)
defer policyAPI.Close()
mux := http.NewServeMux()
newTestServer().WithPolicy(policyclient.New(policyAPI.URL, "test-token")).RegisterRoutes(mux)
rec := httptest.NewRecorder()
mux.ServeHTTP(rec, searchRequest(t))
if rec.Code != http.StatusForbidden {
t.Fatalf("erwartet 403 ohne berechtigung, bekam %d: %s", rec.Code, rec.Body.String())
}
if got["permission"] != "ai.search.read" || got["tenant"] != "acme" {
t.Fatalf("falsche policy-anfrage: %+v", got)
}
}
func TestHandleSearch_PolicyAllows_Passes(t *testing.T) {
policyAPI := newFakePolicyAPI(t, true, nil)
defer policyAPI.Close()
mux := http.NewServeMux()
newTestServer().WithPolicy(policyclient.New(policyAPI.URL, "test-token")).RegisterRoutes(mux)
rec := httptest.NewRecorder()
mux.ServeHTTP(rec, searchRequest(t))
if rec.Code != http.StatusOK {
t.Fatalf("erwartet 200 mit berechtigung, bekam %d: %s", rec.Code, rec.Body.String())
}
}
func TestHandleSearch_PolicyUnavailable_FailsClosed(t *testing.T) {
policyAPI := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
}))
defer policyAPI.Close()
mux := http.NewServeMux()
newTestServer().WithPolicy(policyclient.New(policyAPI.URL, "test-token")).RegisterRoutes(mux)
rec := httptest.NewRecorder()
mux.ServeHTTP(rec, searchRequest(t))
if rec.Code != http.StatusServiceUnavailable {
t.Fatalf("erwartet 503 bei ausfall des berechtigungsdienstes, bekam %d", rec.Code)
}
}
func TestHandleSearch_PolicyCheckedOnlyAfterServiceToken(t *testing.T) {
policyAPI := newFakePolicyAPI(t, true, nil)
defer policyAPI.Close()
mux := http.NewServeMux()
newTestServer().WithPolicy(policyclient.New(policyAPI.URL, "test-token")).RegisterRoutes(mux)
req := searchRequest(t)
req.Header.Set("X-Service-Token", "falsch")
rec := httptest.NewRecorder()
mux.ServeHTTP(rec, req)
if rec.Code != http.StatusUnauthorized {
t.Fatalf("erwartet 401 bei falschem service-token, bekam %d", rec.Code)
}
}
+1 -1
View File
@@ -10,8 +10,8 @@ import (
"net/http"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/summarize"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/threadsummarize"
"gitea.perlbach24.de/scripte/nexarch/common/svcauth"
)
type Server struct {
+3 -3
View File
@@ -125,10 +125,10 @@ func wordSet(s string) map[string]bool {
// TypeMetrics fasst die Bewertungen aller Stichproben eines
// Zusammenfassungstyps zusammen (AK1).
type TypeMetrics struct {
Type string
Count int
Type string
Count int
AverageGroundedness float64
FlaggedCount int
FlaggedCount int
}
// AggregateByType berechnet je Zusammenfassungstyp die Kennzahl über alle
-20
View File
@@ -1,20 +0,0 @@
// Package svcauth vergleicht Service-Token in konstanter Zeit (eigene Kopie
// je Modul, siehe workflow/internal/svcauth — Go-Module teilen keine
// internal/-Pakete über Modulgrenzen; Lehre aus RET-14/F-08: Schutz beim
// ersten Entwurf einbauen statt nachzuruesten).
package svcauth
import (
"crypto/sha256"
"crypto/subtle"
)
// Equal vergleicht die SHA-256-Werte beider Eingaben in konstanter Zeit.
// Ein leeres erwartetes Token stimmt nie.
func Equal(got, want string) bool {
if want == "" {
return false
}
g, w := sha256.Sum256([]byte(got)), sha256.Sum256([]byte(want))
return subtle.ConstantTimeCompare(g[:], w[:]) == 1
}
@@ -27,7 +27,6 @@ func (s *stubProvider) Embed(ctx context.Context, req provider.EmbeddingRequest)
return provider.EmbeddingResponse{}, nil
}
// AK1: Konfidenz wird je Vorschlag mitgeliefert.
func TestSuggest_ReturnsConfidencePerSuggestion(t *testing.T) {
p := &stubProvider{response: `[{"tag":"rechnung","confidence":0.9,"reasoning":"enthaelt rechnungsnummer"},{"tag":"steuer","confidence":0.4,"reasoning":"erwaehnt umsatzsteuer"}]`}
@@ -7,7 +7,7 @@ import (
"testing"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newStore(t *testing.T) *Store {
-62
View File
@@ -1,62 +0,0 @@
// Package testdb liefert Integrationstests einen Pool auf ein eigenes,
// frisch angelegtes Schema (search_path = Schema, public). Tabellen, die ein
// Test per CREATE TABLE anlegt, entstehen damit nur in diesem Schema; Pakete,
// Laeufe und parallele Checkouts teilen sich keine Tabellen mehr.
package testdb
import (
"context"
"fmt"
"sync/atomic"
"testing"
"time"
"github.com/jackc/pgx/v5/pgxpool"
)
var seq atomic.Int64
// Pool legt ein Schema an und liefert einen darauf ausgerichteten Pool;
// beides wird per t.Cleanup wieder entfernt.
func Pool(t testing.TB, dsn string) *pgxpool.Pool {
t.Helper()
pool, _ := PoolWithSchema(t, dsn, nil)
return pool
}
// PoolWithSchema wie Pool, zusaetzlich mit dem Schemanamen und der
// Moeglichkeit, die Verbindungskonfiguration anzupassen.
func PoolWithSchema(t testing.TB, dsn string, adjust func(*pgxpool.Config)) (*pgxpool.Pool, string) {
t.Helper()
ctx := context.Background()
admin, err := pgxpool.New(ctx, dsn)
if err != nil {
t.Fatalf("testdb: verbindung: %v", err)
}
schema := fmt.Sprintf("connecttest_%d_%d", time.Now().UnixNano(), seq.Add(1))
if _, err := admin.Exec(ctx, "CREATE SCHEMA "+schema); err != nil {
admin.Close()
t.Fatalf("testdb: schema anlegen: %v", err)
}
cfg, err := pgxpool.ParseConfig(dsn)
if err != nil {
admin.Close()
t.Fatalf("testdb: dsn: %v", err)
}
cfg.ConnConfig.RuntimeParams["search_path"] = schema + ",public"
if adjust != nil {
adjust(cfg)
}
pool, err := pgxpool.NewWithConfig(ctx, cfg)
if err != nil {
admin.Close()
t.Fatalf("testdb: pool: %v", err)
}
t.Cleanup(func() {
pool.Close()
_, _ = admin.Exec(context.Background(), "DROP SCHEMA "+schema+" CASCADE")
admin.Close()
})
return pool, schema
}
@@ -30,9 +30,9 @@ type Thread struct {
// Result ist die Zusammenfassung eines Threads.
type Result struct {
Summary string
MessageCount int
LastMessageID string
Summary string
MessageCount int
LastMessageID string
}
// Options steuert die Zusammenfassung.
+1 -1
View File
@@ -11,8 +11,8 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/migrate"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/testdb"
"gitea.perlbach24.de/scripte/nexarch/ai/internal/vectorindex"
"gitea.perlbach24.de/scripte/nexarch/common/testdb"
)
func newPool(t *testing.T) *pgxpool.Pool {
+1 -1
View File
@@ -12,9 +12,9 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/complianceapi"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/rbacclient"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/retentionapi"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
)
func main() {
+1 -1
View File
@@ -10,10 +10,10 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/kennzahlenapi"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/rbacclient"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/retentionapi"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
)
func main() {
+2 -2
View File
@@ -13,10 +13,10 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/legalholdapi"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/moduleadapter"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/tenantregistryclient"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
"gitea.perlbach24.de/scripte/nexarch/common/tenantregistryclient"
)
func main() {
+1 -1
View File
@@ -10,8 +10,8 @@ import (
"net/http"
"os"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/restoretest"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
)
func main() {
+1 -1
View File
@@ -13,9 +13,9 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/rbacclient"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/retentionapi"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
)
func main() {
+1 -1
View File
@@ -14,8 +14,8 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/scrub"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
)
func main() {
+1 -1
View File
@@ -30,7 +30,7 @@ Verbindlich für jeden Pull Request, der Dateien in einem der folgenden Bereiche
- **WORM-Durchsetzung** (`archive/internal/wormstore/`) — die Storage-Object-Lock-Garantie selbst.
- **Zugriffsprüfung** (`archive/internal/rbacclient/`, `archive/internal/retentionapi/`) — RBAC-Anbindung
und die APIs, die sie durchsetzen.
- **Tenant-/Schlüssel-Bezug** (`archive/internal/tenantregistryclient/`, `archive/internal/kekclient/`,
- **Tenant-/Schlüssel-Bezug** (`archive/internal/kekclient/`,
`archive/internal/backupcrypto/`) — unabhängige Tenant-Validierung und Verschlüsselungspfade.
Regel: **jede geänderte `.go`-Datei in einem dieser Bereiche muss von einer geänderten oder neuen
+4 -5
View File
@@ -4,7 +4,10 @@ go 1.25.0
toolchain go1.25.13
require github.com/jackc/pgx/v5 v5.9.2
require (
gitea.perlbach24.de/scripte/nexarch/common v0.1.0
github.com/jackc/pgx/v5 v5.9.2
)
require (
github.com/jackc/pgpassfile v1.0.0 // indirect
@@ -13,7 +16,3 @@ require (
golang.org/x/sync v0.22.0 // indirect
golang.org/x/text v0.41.0 // indirect
)
require gitea.perlbach24.de/scripte/nexarch/common v0.0.0
replace gitea.perlbach24.de/scripte/nexarch/common => ../common
+2
View File
@@ -1,3 +1,5 @@
gitea.perlbach24.de/scripte/nexarch/common v0.1.0 h1:biNzFr2LOMZC7b1leY3smQtrMmSMp6IW80OvR4LSjLY=
gitea.perlbach24.de/scripte/nexarch/common v0.1.0/go.mod h1:CiEImG++QMt1xZqSMeDJhPiB7sfWTLZOwjS6OY/Iguc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -0,0 +1,51 @@
package archtest
import (
"io/fs"
"os"
"path/filepath"
"regexp"
"strings"
"testing"
)
// Architekturtest: im Produktivcode dieses Moduls gibt es keine Aufrufe ueber
// den Standard-Client ohne Zeitlimit.
func TestNoUnboundedDefaultClientInProductionCode(t *testing.T) {
root, err := filepath.Abs(filepath.Join("..", ".."))
if err != nil {
t.Fatal(err)
}
forbidden := regexp.MustCompile(`http\.DefaultClient|http\.(Get|Post|Head|PostForm)\(`)
err = filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() {
if n := d.Name(); n == "node_modules" || n == "testdata" || n == ".git" {
return filepath.SkipDir
}
return nil
}
if !strings.HasSuffix(path, ".go") || strings.HasSuffix(path, "_test.go") {
return nil
}
data, err := os.ReadFile(path)
if err != nil {
return err
}
for i, line := range strings.Split(string(data), "\n") {
if t := strings.TrimSpace(line); strings.HasPrefix(t, "//") {
continue
}
if forbidden.MatchString(line) {
rel, _ := filepath.Rel(root, path)
t.Errorf("%s:%d nutzt den Standard-Client ohne Zeitlimit: %s", rel, i+1, strings.TrimSpace(line))
}
}
return nil
})
if err != nil {
t.Fatal(err)
}
}
+1 -1
View File
@@ -33,7 +33,7 @@ func moduleRoot(t *testing.T) string {
// Antwort bzw. der rohe ListenAndServe-Aufruf genau die erlaubte
// Implementierung der Regel selbst ist (API-20/API-21), kein Verstoss.
// Das Archive-Modul hat keine weiteren, physisch verschachtelten Go-Module.
var exempt = []string{"internal/httpharden"}
var exempt = []string{}
// TestNoErrorTextLeaksIntoHTTPResponses ist Akzeptanzkriterium 1: kein
// err.Error() direkt in einer HTTP-Antwort, ausser ueber apierror.
@@ -1,70 +0,0 @@
// Package auditclient ist ein schlanker HTTP-Client für Core AUD-08
// (internal/audit, POST /audit/ingest). Archive ist ein physisch
// getrenntes Go-Modul und kann Cores internal/audit daher nicht direkt
// importieren — nur über dessen HTTP-Schnittstelle. Gleiches Muster wie
// archive/internal/notifyclient (CFG-05).
package auditclient
import (
"bytes"
"context"
"encoding/json"
"fmt"
"gitea.perlbach24.de/scripte/nexarch/common/httpclient"
"net/http"
)
type Client struct {
BaseURL string
ServiceToken string
HTTPClient *http.Client
}
func New(baseURL, serviceToken string) *Client {
return &Client{BaseURL: baseURL, ServiceToken: serviceToken, HTTPClient: httpclient.Default()}
}
type ingestRequest struct {
TenantSlug string `json:"tenant_slug"`
Actor string `json:"actor"`
Action string `json:"action"`
Target string `json:"target"`
Metadata map[string]any `json:"metadata"`
}
// Ingest meldet EIN Audit-Ereignis an Core. Jeder Fehler (Transport,
// Timeout, unerwarteter Status) wird als Fehler zurückgegeben — der
// Aufrufer entscheidet, ob/wie er das nachbehandelt (siehe
// archive/internal/audittrail für den outage-toleranten Wrapper).
func (c *Client) Ingest(ctx context.Context, tenantSlug, actor, action, target string, metadata map[string]any) error {
body, err := json.Marshal(ingestRequest{
TenantSlug: tenantSlug, Actor: actor, Action: action, Target: target, Metadata: metadata,
})
if err != nil {
return fmt.Errorf("auditclient: request kodieren: %w", err)
}
req, err := http.NewRequestWithContext(ctx, http.MethodPost, c.BaseURL+"/audit/ingest", bytes.NewReader(body))
if err != nil {
return fmt.Errorf("auditclient: request bauen: %w", err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Service-Token", c.ServiceToken)
resp, err := c.httpClient().Do(req)
if err != nil {
return fmt.Errorf("auditclient: aufruf fehlgeschlagen: %w", err)
}
defer func() { _ = resp.Body.Close() }()
if resp.StatusCode != http.StatusAccepted {
return fmt.Errorf("auditclient: unerwarteter status %d", resp.StatusCode)
}
return nil
}
func (c *Client) httpClient() *http.Client {
if c.HTTPClient != nil {
return c.HTTPClient
}
return httpclient.Default()
}
+1 -1
View File
@@ -20,7 +20,7 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/auditclient"
"gitea.perlbach24.de/scripte/nexarch/common/auditclient"
)
type Recorder struct {
@@ -11,7 +11,7 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/auditclient"
"gitea.perlbach24.de/scripte/nexarch/common/auditclient"
)
func setupOutboxTest(t *testing.T) *pgxpool.Pool {
@@ -13,9 +13,9 @@ import (
"strings"
"testing"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/auditclient"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/audittrail"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/referenceset"
"gitea.perlbach24.de/scripte/nexarch/common/auditclient"
"github.com/jackc/pgx/v5/pgxpool"
)
-116
View File
@@ -1,116 +0,0 @@
// Package httpharden liefert gehaertete http.Server-Grundeinstellungen
// (Timeouts, Header-Limit) und ein Body-Limit fuer alle Dienste (QA-15 F-05).
// Dieselbe Datei existiert in archive/internal/httpharden und
// dms/internal/httpharden, weil die Module getrennte go.mod-Dateien haben.
package httpharden
import (
"log"
"net/http"
"os"
"strconv"
"time"
"gitea.perlbach24.de/scripte/nexarch/common/apierror"
)
const (
DefaultReadHeaderTimeout = 10 * time.Second
DefaultReadTimeout = 30 * time.Second
DefaultWriteTimeout = 60 * time.Second
DefaultIdleTimeout = 120 * time.Second
DefaultMaxHeaderBytes = 1 << 20
DefaultMaxBodyBytes = 1 << 20
EnvReadHeaderTimeout = "NEXARCH_HTTP_READ_HEADER_TIMEOUT_SECONDS"
EnvReadTimeout = "NEXARCH_HTTP_READ_TIMEOUT_SECONDS"
EnvWriteTimeout = "NEXARCH_HTTP_WRITE_TIMEOUT_SECONDS"
EnvIdleTimeout = "NEXARCH_HTTP_IDLE_TIMEOUT_SECONDS"
EnvMaxBodyBytes = "NEXARCH_HTTP_MAX_BODY_BYTES"
)
// Options weicht vom Standard ab. Nullwerte bedeuten Standard bzw. Env-Wert;
// StreamingBodies/StreamingResponses setzen ReadTimeout/WriteTimeout auf 0
// (unbegrenzt), damit lange Uploads und Downloads nicht abbrechen. Schutz
// gegen langsame Header bleibt ueber ReadHeaderTimeout und IdleTimeout.
type Options struct {
StreamingBodies bool
StreamingResponses bool
}
func envSeconds(name string, def time.Duration) time.Duration {
v := os.Getenv(name)
if v == "" {
return def
}
n, err := strconv.Atoi(v)
if err != nil || n < 1 || n > 3600 {
log.Fatalf("%s muss eine ganze Zahl zwischen 1 und 3600 sein, war %q", name, v)
}
return time.Duration(n) * time.Second
}
// MaxBodyBytes liest die Body-Obergrenze (Standard 1 MiB, Env
// NEXARCH_HTTP_MAX_BODY_BYTES, 1 KiB bis 1 GiB).
func MaxBodyBytes() int64 {
v := os.Getenv(EnvMaxBodyBytes)
if v == "" {
return DefaultMaxBodyBytes
}
n, err := strconv.ParseInt(v, 10, 64)
if err != nil || n < 1<<10 || n > 1<<30 {
log.Fatalf("%s muss zwischen 1024 und 1073741824 liegen, war %q", EnvMaxBodyBytes, v)
}
return n
}
// NewServer baut einen http.Server mit gehaerteten Timeouts.
func NewServer(addr string, h http.Handler, opt Options) *http.Server {
s := &http.Server{
Addr: addr,
Handler: h,
ReadHeaderTimeout: envSeconds(EnvReadHeaderTimeout, DefaultReadHeaderTimeout),
ReadTimeout: envSeconds(EnvReadTimeout, DefaultReadTimeout),
WriteTimeout: envSeconds(EnvWriteTimeout, DefaultWriteTimeout),
IdleTimeout: envSeconds(EnvIdleTimeout, DefaultIdleTimeout),
MaxHeaderBytes: DefaultMaxHeaderBytes,
}
if opt.StreamingBodies {
s.ReadTimeout = 0
}
if opt.StreamingResponses {
s.WriteTimeout = 0
}
return s
}
// ListenAndServe ersetzt http.ListenAndServe: JSON-API mit Body-Limit und
// (QA-15 F-14) apierror.Normalize aussen um jeden Handler — 5xx-Antworten
// verlieren dadurch automatisch jeden Interna-Text (Datenbank-/Pfadfehler),
// unabhaengig davon, was der einzelne Handler geschrieben hat.
func ListenAndServe(addr string, h http.Handler) error {
return NewServer(addr, apierror.Normalize(LimitBody(MaxBodyBytes(), h)), Options{}).ListenAndServe()
}
// ListenAndServeStreaming fuer Dienste mit grossen Uploads/Downloads: keine
// globale Body-Grenze und keine Lese-/Schreib-Gesamtzeit, nur Header-Timeout.
func ListenAndServeStreaming(addr string, h http.Handler) error {
return NewServer(addr, apierror.Normalize(h), Options{StreamingBodies: true, StreamingResponses: true}).ListenAndServe()
}
// LimitBody begrenzt Request-Bodies. Ein Content-Length ueber dem Limit wird
// vor dem Handler mit 413 abgewiesen, chunked Bodies ueber MaxBytesReader.
func LimitBody(max int64, next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.ContentLength > max {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusRequestEntityTooLarge)
_, _ = w.Write([]byte(`{"error":{"code":"payload_too_large","message":"Anfrage zu gross"}}`))
return
}
if r.Body != nil && r.Body != http.NoBody {
r.Body = http.MaxBytesReader(w, r.Body, max)
}
next.ServeHTTP(w, r)
})
}
@@ -12,7 +12,7 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/common/svcauth"
)
const (
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/archive/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/common/svcauth"
)
const (
-1
View File
@@ -15,7 +15,6 @@ import (
var sensitivePathPatterns = []*regexp.Regexp{
regexp.MustCompile(`(^|/)archive/internal/wormstore/`),
regexp.MustCompile(`(^|/)archive/internal/rbacclient/`),
regexp.MustCompile(`(^|/)archive/internal/tenantregistryclient/`),
regexp.MustCompile(`(^|/)archive/internal/retentionapi/`),
regexp.MustCompile(`(^|/)archive/internal/kekclient/`),
regexp.MustCompile(`(^|/)archive/internal/backupcrypto/`),
@@ -60,7 +60,6 @@ func TestCheckDiff_CoversAllSensitiveAreas(t *testing.T) {
cases := []string{
"archive/internal/wormstore/wormstore.go",
"archive/internal/rbacclient/rbacclient.go",
"archive/internal/tenantregistryclient/tenantregistryclient.go",
"archive/internal/retentionapi/handler.go",
"archive/internal/kekclient/kekclient.go",
"archive/internal/backupcrypto/reposecret.go",
+1 -1
View File
@@ -1,7 +1,7 @@
// Package retentionverify implementiert VAL-03: Stichprobenvergleich von
// retain_until (Quelle aus TAR-01 vs. nach der Migration im generischen
// Retention-Objektmodell) je Tenant, nach dem Berichtsmuster aus VAL-01
// (internal/migrationverify): Abweichung ist entweder erklaert oder
// (internal/migration/verify): Abweichung ist entweder erklaert oder
// blockierender Befund, nie reine Notiz.
package retentionverify
@@ -1,60 +0,0 @@
// Package tenantregistryclient ist ein schlanker HTTP-Client fuer Core
// TEN-01 (Tenant-Registry). Archive ist ein physisch getrenntes Go-Modul
// und kann Core TEN-01 daher nicht direkt importieren - nur ueber dessen
// HTTP-Schnittstelle abfragen. Gleiches Muster wie archive/internal/
// rbacclient (RET-08) und archive/internal/notifyclient (RET-07).
package tenantregistryclient
import (
"context"
"fmt"
"gitea.perlbach24.de/scripte/nexarch/common/httpclient"
"net/http"
"net/url"
)
// Client fragt Core TEN-01 nach der Gueltigkeit eines Tenant-Kontexts.
type Client struct {
BaseURL string
ServiceToken string
HTTPClient *http.Client
}
func New(baseURL, serviceToken string) *Client {
return &Client{BaseURL: baseURL, ServiceToken: serviceToken}
}
// VerifyTenant prueft, ob tenantSlug in der Core-Tenant-Registry als
// existierender Tenant gefuehrt wird - unabhaengig davon, was das
// aufrufende Modul (DMS/Mail) selbst behauptet. Ein Transport-/
// Serverfehler wird als Fehler zurueckgegeben, NICHT stillschweigend als
// gueltig behandelt - der Aufrufer muss fail-closed (ablehnen) reagieren.
func (c *Client) VerifyTenant(ctx context.Context, tenantSlug string) (bool, error) {
req, err := http.NewRequestWithContext(ctx, http.MethodGet, c.BaseURL+"/tenants/"+url.PathEscape(tenantSlug), nil)
if err != nil {
return false, fmt.Errorf("tenantregistryclient: request bauen: %w", err)
}
req.Header.Set("X-Service-Token", c.ServiceToken)
resp, err := c.httpClient().Do(req)
if err != nil {
return false, fmt.Errorf("tenantregistryclient: aufruf fehlgeschlagen: %w", err)
}
defer func() { _ = resp.Body.Close() }()
switch resp.StatusCode {
case http.StatusOK:
return true, nil
case http.StatusNotFound:
return false, nil
default:
return false, fmt.Errorf("tenantregistryclient: unerwarteter status %d", resp.StatusCode)
}
}
func (c *Client) httpClient() *http.Client {
if c.HTTPClient != nil {
return c.HTTPClient
}
return httpclient.Default()
}
@@ -1,59 +0,0 @@
package tenantregistryclient
import (
"context"
"net/http"
"net/http/httptest"
"testing"
)
func TestVerifyTenant_ExistingTenant(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/tenants/mandant-a" {
t.Errorf("pfad = %q, want /tenants/mandant-a", r.URL.Path)
}
w.WriteHeader(http.StatusOK)
}))
defer server.Close()
c := New(server.URL, "test-token")
ok, err := c.VerifyTenant(context.Background(), "mandant-a")
if err != nil {
t.Fatalf("verifytenant: %v", err)
}
if !ok {
t.Fatal("erwartet gueltigen tenant, habe false")
}
}
func TestVerifyTenant_UnknownTenant(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
}))
defer server.Close()
c := New(server.URL, "test-token")
ok, err := c.VerifyTenant(context.Background(), "unbekannt")
if err != nil {
t.Fatalf("verifytenant: %v", err)
}
if ok {
t.Fatal("erwartet ungueltigen tenant, habe true")
}
}
func TestVerifyTenant_ServerErrorIsFailClosed(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
}))
defer server.Close()
c := New(server.URL, "test-token")
ok, err := c.VerifyTenant(context.Background(), "mandant-a")
if err == nil {
t.Fatal("erwartet fehler bei 500-antwort der tenant-registry")
}
if ok {
t.Fatal("erwartet false bei fehler (fail-closed)")
}
}
+49
View File
@@ -0,0 +1,49 @@
package main
import (
"context"
"errors"
"fmt"
"time"
"github.com/jackc/pgx/v5/pgconn"
)
const exitPermanentDBError = 2
type pinger interface {
Ping(ctx context.Context) error
}
func isPermanentDBError(err error) bool {
var pgErr *pgconn.PgError
if !errors.As(err, &pgErr) {
return false
}
switch pgErr.Code {
case "28000", "28P01", "3D000":
return true
}
return false
}
func waitForDB(ctx context.Context, p pinger, timeout time.Duration, sleep func(time.Duration)) error {
deadline := time.Now().Add(timeout)
delay := time.Second
for {
err := p.Ping(ctx)
if err == nil {
return nil
}
if isPermanentDBError(err) {
return fmt.Errorf("datenbank lehnt Anmeldung oder Datenbank ab (dauerhaft): %w", err)
}
if time.Now().Add(delay).After(deadline) {
return fmt.Errorf("datenbank nach %s nicht erreichbar: %w", timeout, err)
}
sleep(delay)
if delay < 30*time.Second {
delay *= 2
}
}
}
+66
View File
@@ -0,0 +1,66 @@
package main
import (
"context"
"errors"
"testing"
"time"
"github.com/jackc/pgx/v5/pgconn"
)
type fakePinger struct {
errs []error
calls int
}
func (f *fakePinger) Ping(context.Context) error {
i := f.calls
f.calls++
if i < len(f.errs) {
return f.errs[i]
}
return nil
}
func TestWaitForDB_PermanentAuthErrorStopsImmediately(t *testing.T) {
p := &fakePinger{errs: []error{&pgconn.PgError{Code: "28P01"}, nil}}
sleeps := 0
err := waitForDB(context.Background(), p, time.Minute, func(time.Duration) { sleeps++ })
if err == nil || !isPermanentDBError(err) {
t.Fatalf("erwartet dauerhaften fehler, war %v", err)
}
if p.calls != 1 || sleeps != 0 {
t.Fatalf("kein retry erwartet, calls=%d sleeps=%d", p.calls, sleeps)
}
}
func TestWaitForDB_TransientErrorRetriesWithBackoff(t *testing.T) {
p := &fakePinger{errs: []error{errors.New("connection refused"), errors.New("connection refused")}}
var delays []time.Duration
if err := waitForDB(context.Background(), p, time.Minute, func(d time.Duration) { delays = append(delays, d) }); err != nil {
t.Fatal(err)
}
if p.calls != 3 || len(delays) != 2 || delays[1] <= delays[0] {
t.Fatalf("calls=%d delays=%v", p.calls, delays)
}
}
func TestWaitForDB_GivesUpAfterTimeout(t *testing.T) {
p := &fakePinger{errs: []error{errors.New("x"), errors.New("x"), errors.New("x"), errors.New("x")}}
err := waitForDB(context.Background(), p, 0, func(time.Duration) {})
if err == nil || isPermanentDBError(err) {
t.Fatalf("erwartet transienten timeout-fehler, war %v", err)
}
}
func TestIsPermanentDBError(t *testing.T) {
for code, want := range map[string]bool{"28P01": true, "28000": true, "3D000": true, "57P03": false} {
if got := isPermanentDBError(&pgconn.PgError{Code: code}); got != want {
t.Errorf("%s: got %v", code, got)
}
}
if isPermanentDBError(errors.New("connection refused")) {
t.Error("verbindungsfehler ist transient")
}
}
+12 -1
View File
@@ -17,10 +17,10 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
"gitea.perlbach24.de/scripte/nexarch/internal/audit"
"gitea.perlbach24.de/scripte/nexarch/internal/auth"
"gitea.perlbach24.de/scripte/nexarch/internal/authtoken"
"gitea.perlbach24.de/scripte/nexarch/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/internal/lockout"
"gitea.perlbach24.de/scripte/nexarch/internal/moduletoken"
"gitea.perlbach24.de/scripte/nexarch/internal/rbac"
@@ -82,6 +82,17 @@ func main() {
}
defer pool.Close()
dbWait := time.Duration(envInt("NEXARCH_ACCOUNT_DB_STARTUP_TIMEOUT_SECONDS", 120, 0, 3600)) * time.Second
if err := waitForDB(ctx, pool, dbWait, time.Sleep); err != nil {
log.Printf("account-api: %v — DSN in NEXARCH_ACCOUNT_TENANT_DSN (Rolle, Passwort, Datenbank) pruefen", err)
if isPermanentDBError(err) {
pool.Close()
os.Exit(exitPermanentDBError)
}
pool.Close()
os.Exit(1)
}
totpCipher, err := newTOTPCipher()
if err != nil {
log.Fatalf("totp-verschluesselung: %v", err)
+1 -1
View File
@@ -18,10 +18,10 @@ import (
"net/http"
"os"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
"gitea.perlbach24.de/scripte/nexarch/internal/audit"
"gitea.perlbach24.de/scripte/nexarch/internal/auditadmin"
"gitea.perlbach24.de/scripte/nexarch/internal/db"
"gitea.perlbach24.de/scripte/nexarch/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/internal/svcauth"
)
+2 -2
View File
@@ -1,6 +1,6 @@
// cor01-tenant-migrate fuehrt COR-01 aus: Uebernahme der freigegebenen
// tenant_migration_map (MAP-02) in Core TEN-01. Einmalig wiederholbar
// gegen dieselbe Quelle (siehe internal/migrationtenant).
// gegen dieselbe Quelle (siehe internal/migration/tenant).
package main
import (
@@ -9,7 +9,7 @@ import (
"os"
"gitea.perlbach24.de/scripte/nexarch/internal/db"
"gitea.perlbach24.de/scripte/nexarch/internal/migrationtenant"
"gitea.perlbach24.de/scripte/nexarch/internal/migration/tenant"
"gitea.perlbach24.de/scripte/nexarch/internal/tenant"
)
+2 -2
View File
@@ -1,6 +1,6 @@
// cor02-user-migrate fuehrt COR-02 aus: Uebernahme der freigegebenen
// user_migration_map in Core IAM-01, bcrypt-Hashes 1:1 ohne Rehash.
// Einmalig wiederholbar gegen dieselbe Quelle (siehe internal/migrationuser).
// Einmalig wiederholbar gegen dieselbe Quelle (siehe internal/migration/user).
package main
import (
@@ -9,7 +9,7 @@ import (
"os"
"gitea.perlbach24.de/scripte/nexarch/internal/db"
"gitea.perlbach24.de/scripte/nexarch/internal/migrationuser"
"gitea.perlbach24.de/scripte/nexarch/internal/migration/user"
"gitea.perlbach24.de/scripte/nexarch/internal/tenant"
)
+1 -1
View File
@@ -5,10 +5,10 @@ import (
"log"
"net/http"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
"gitea.perlbach24.de/scripte/nexarch/internal/audit"
"gitea.perlbach24.de/scripte/nexarch/internal/config"
"gitea.perlbach24.de/scripte/nexarch/internal/db"
"gitea.perlbach24.de/scripte/nexarch/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/internal/moduledirectory"
"gitea.perlbach24.de/scripte/nexarch/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/internal/tenant"
+1 -1
View File
@@ -13,8 +13,8 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
"gitea.perlbach24.de/scripte/nexarch/internal/flag"
"gitea.perlbach24.de/scripte/nexarch/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/internal/kek"
"gitea.perlbach24.de/scripte/nexarch/internal/moduleregistry"
"gitea.perlbach24.de/scripte/nexarch/internal/tenant"
+1 -1
View File
@@ -16,10 +16,10 @@ import (
"os"
"time"
"gitea.perlbach24.de/scripte/nexarch/common/httpharden"
"gitea.perlbach24.de/scripte/nexarch/internal/adminapi"
"gitea.perlbach24.de/scripte/nexarch/internal/db"
"gitea.perlbach24.de/scripte/nexarch/internal/flag"
"gitea.perlbach24.de/scripte/nexarch/internal/httpharden"
"gitea.perlbach24.de/scripte/nexarch/internal/license"
"gitea.perlbach24.de/scripte/nexarch/internal/svcauth"
"gitea.perlbach24.de/scripte/nexarch/internal/usage"
Loaded 100 of 510 files, more files were not shown because too many files have changed in this diff. Show more