Jan ca0c379166
All checks were successful
release-tag / release-image (push) Successful in 1m38s
web/static/style.css aktualisiert
2026-07-22 09:39:51 +02:00
2026-07-20 21:03:05 +02:00
2026-07-20 21:03:05 +02:00
2026-07-22 05:58:38 +02:00
2026-07-22 05:58:38 +02:00
2026-07-22 05:58:38 +02:00
2026-07-20 21:03:05 +02:00
2026-07-22 05:58:38 +02:00
2026-07-20 21:03:05 +02:00
2026-07-22 09:39:51 +02:00
2026-07-20 21:03:05 +02:00
2026-07-20 21:03:05 +02:00
2026-07-22 05:58:38 +02:00
2026-07-20 21:51:04 +02:00
2026-07-20 21:03:05 +02:00
2026-07-20 21:03:05 +02:00
2026-07-22 05:58:38 +02:00
2026-07-22 05:58:38 +02:00
2026-07-22 05:58:38 +02:00
2026-07-20 21:03:05 +02:00

AI Disclosure Standard 1.6.3

Ein zustandsloser Go-Dienst für sichtbare und maschinenlesbare Erklärungen zur KI-Nutzung in Artikeln, Webseiten und einzelnen Inhaltsbestandteilen.

Funktionen

  • einzelne Deklarationen und zusammengefasste Artikel-/Webseiten-Deklarationen;
  • SVG-Badges, HTML-Erklärung und JSON-LD unter einem gemeinsamen Link;
  • Text, Titelbild, weitere Bilder, Recherche, Übersetzung, Audio, Video und Code getrennt erfassbar;
  • automatisch erzeugte, professionell formulierte Zusammenfassung als Fließtext und strukturierte Tabelle;
  • frei wählbare Nachweisgrundlage: Selbsterklärung, technisch protokolliert, signiert oder verifiziert;
  • Deutsch, Englisch, Französisch, Spanisch, Italienisch, Niederländisch, Portugiesisch und Polnisch;
  • Sprachumschalter direkt auf der Ergebnisseite;
  • mehrsprachige Hintergrundseite zu Artikel 50 des EU AI Act, Kennzeichnungspflichten und freiwilliger Transparenz;
  • optionale lizenzierte Funktionen für eigene Texte und Badge-Darstellung;
  • Offline-, Hybrid- und Online-Prüfung über die eigenständige Universal License Platform;
  • konfigurierbare Seiten für Impressum, Datenschutz und Barrierefreiheit;
  • CSP mit Request-Nonce, minimierte Logs, vertrauensgebundene Proxy-Header und gehärtete Container-Defaults;
  • Health-, Readiness- und optional geschützter Prometheus-Endpunkt;
  • Docker-, Kubernetes- und Docker-Swarm-Deployment.

Start unter Windows

go run .\cmd\server

Danach:

Generator:    http://localhost:8080/
Produktseite: http://localhost:8080/product
Hintergrund:  http://localhost:8080/background
Impressum:    http://localhost:8080/impressum
Datenschutz:  http://localhost:8080/datenschutz
Barrierefrei: http://localhost:8080/barrierefreiheit
Healthcheck:  http://localhost:8080/healthz
Funktionen:   http://localhost:8080/v1/capabilities

Go lädt .env nicht selbst. Unter PowerShell kann die Datei vor dem Start in die Prozessumgebung übernommen werden oder Docker Compose mit --env-file .env verwendet werden.

Docker Compose

Copy-Item .env.example .env
docker compose --env-file .env up -d --build

Lizenzprüfung

Dieses Projekt stellt keine Lizenzen aus und enthält keine Schlüsselgenerierung, privaten Schlüssel, Lizenzverwaltung, Admin-Oberfläche oder eigenen Lizenzserver. Diese Aufgaben gehören ausschließlich in die separat betriebene Universal License Platform.

Der Produktserver enthält nur den Laufzeit-Client und akzeptiert:

LICENSE_TOKEN=...
LICENSE_MODE=offline
LICENSE_SERVER_URL=
LICENSE_INSTANCE_ID=

Der Produktname ist fest verdrahtet:

ai-disclosure-standard

Für die vorhandenen Funktionen verwendet die Plattform diese Feature-IDs:

custom_text
custom_badge
white_label

Vertrauensschlüssel einbetten

Die öffentlichen Issuer- und Lease-Schlüssel werden von der Universal License Platform bereitgestellt. Lade dort den Trust Store herunter und ersetze vor dem Build:

internal/app/trusted_keys.json

PowerShell-Beispiel:

Invoke-WebRequest `
  "https://licenses.example.org/api/v1/trust-store" `
  -OutFile ".\internal\app\trusted_keys.json"

go build .\cmd\server

Der Trust Store wird mit go:embed fest in das Binary eingebaut. Es gibt absichtlich kein LICENSE_PUBLIC_KEY und keinen zur Laufzeit austauschbaren Trust Store.

Prüfmodi

Offline prüft den signierten Lizenz-Token ausschließlich lokal.

LICENSE_MODE=offline
LICENSE_TOKEN=...

Hybrid fragt die Universal License Platform ab und speichert ein kurzlebiges, signiertes Lease. Bei temporärer Nichterreichbarkeit kann das letzte gültige Lease innerhalb der in der Lizenz festgelegten Grace-Periode verwendet werden.

LICENSE_MODE=hybrid
LICENSE_TOKEN=...
LICENSE_CACHE_FILE=/data/license-lease.json

Online benötigt eine erfolgreiche aktuelle Prüfung durch die Plattform.

LICENSE_MODE=online
LICENSE_TOKEN=...

Bei Hybrid- und Online-Lizenzen übernimmt der Client bevorzugt die von der Plattform signiert in der Lizenz gespeicherte Server-URL. LICENSE_SERVER_URL ist nur ein expliziter Override beziehungsweise Fallback.

Der Client verwendet die Plattform-API:

POST /api/v1/licenses/validate

und unterstützt für bestehende Installationen weiterhin:

POST /v1/introspect

Weitere Einzelheiten stehen in docs/LICENSE-INTEGRATION.md. Für bestehende 1.5-Installationen siehe docs/MIGRATION-1.5-TO-1.6.md.

Konfiguration

Betrieb und Sicherheit

Variable Standard Bedeutung
LISTEN_ADDRESS :8080 HTTP-Adresse
BASE_URL http://localhost:8080 öffentliche Origin ohne Pfad, Query oder Fragment
PUBLIC_NAME AI Usage Disclosure sichtbarer Produktname
CONTACT_URL Projektseite Kontakt-/Informationsseite
DEFAULT_LANGUAGE de Standardsprache
TRUST_PROXY false Proxy-Header nur berücksichtigen, wenn zusätzlich vertrauenswürdige Netze gesetzt sind
TRUSTED_PROXY_CIDRS leer kommagetrennte CIDRs der tatsächlich kontrollierten Reverse Proxies
LOG_CLIENT_IP false Client-IP in Anwendungslogs aufnehmen; aus Datenschutzgründen standardmäßig deaktiviert
ENABLE_HSTS true HSTS bei einer https://-Basis-URL senden
METRICS_ENABLED false /metrics aktivieren
METRICS_TOKEN leer bei aktiviertem /metrics verpflichtender Bearer-Token; auch als METRICS_TOKEN_FILE

Betreiber- und Datenschutzangaben

Die Seiten /impressum, /datenschutz und /barrierefreiheit werden aus Umgebungsvariablen erzeugt. Mindestens LEGAL_NAME, LEGAL_ADDRESS, LEGAL_EMAIL, HOSTING_PROVIDER, LOG_RETENTION und CONSUMER_DISPUTE_STATUS müssen vor öffentlichem Betrieb geprüft werden. Mit LEGAL_STRICT=true startet der Server nicht, solange Pflichtwerte fehlen oder Platzhalter wie REPLACE_ME enthalten.

Weitere Variablen stehen vollständig in .env.example. Dazu gehören Vertretungsberechtigte, Register- und Umsatzsteuerangaben, redaktionell Verantwortliche, Datenschutzkontakt, Empfänger, Drittlandübermittlungen, Aufsichtsbehörde, Verbraucherstreitbeilegung und Barrierefreiheitskontakt.

Lizenzprüfung

Variable Standard Bedeutung
LICENSE_TOKEN leer von der Universal License Platform ausgestellter Token
LICENSE_MODE offline Mindestmodus offline, hybrid oder online
LICENSE_SERVER_URL leer optionaler Prüfserver-Override
LICENSE_INSTANCE_ID leer optionale Instanzbindung
LICENSE_CACHE_FILE ./data/license-lease.json signierter Hybrid-Lease-Cache
LICENSE_REFRESH_INTERVAL 15m Hintergrundaktualisierung
LICENSE_REQUEST_TIMEOUT 5s Timeout der Onlineprüfung

Die mitgelieferten Rechtstexte sind eine technisch abgestimmte Vorlage, keine individuelle Rechtsberatung. Die konkrete Einordnung hängt unter anderem von Betreiber, Hosting, Vertragsmodell, Zielgruppe, Zusatzdiensten und redaktionellen Inhalten ab. Siehe docs/LEGAL-AND-SECURITY.md und den Reviewbericht vom 20. Juli 2026.

Für die Abgrenzung zum EU AI Act und insbesondere zu Artikel 4 und Artikel 50 siehe außerdem docs/EU-AI-ACT-COMPLIANCE.md. Das JSON-LD dieses Projekts ist ergänzende Dokumentation und kein automatischer Ersatz für eine Provider-Markierung nach Artikel 50 Absatz 2.

API

GET  /badge/{preset}.svg
GET  /v1/badge.svg
GET  /background
GET  /impressum
GET  /datenschutz
GET  /barrierefreiheit
GET  /declaration
GET  /v1/declaration.json
POST /v1/validate
GET  /v1/capabilities
GET  /healthz
GET  /readyz
GET  /metrics                    optional, standardmäßig deaktiviert

Beispiel für eine Artikelerklärung:

/declaration?mode=article&textExtent=none&textReview=none&imageExtent=full&imageReview=editorial&researchExtent=assisted&researchReview=expert&assurance=technicallyRecorded&lang=de

SVG-Darstellungen

Der Query-Parameter theme unterstützt drei Darstellungen:

Wert Ausgabe
color klassisches zweifarbiges Text-Badge
mono monochromes Text-Badge
emoji quadratisches, rein grafisches SVG-Symbol mit zugänglichem Titel

Die Emoji-Variante verwendet je nach Preset ein Mensch-, Recherche-, Zusammenfassungs- oder Blitzsymbol. Beispiel:

/badge/research.svg?theme=emoji&lang=de&link=auto

Bei theme=emoji werden style=flat und style=flat-square ignoriert, da die Ausgabe immer quadratisch ist. Mit der Pro-Funktion custom_badge steuert leftColor die Symbolfarbe und rightColor die Hintergrundfarbe.

Nachweisgrundlage

Der Generator bietet vier interoperable Werte. Sie werden über den Query-Parameter assurance an HTML- und JSON-LD-Ausgaben übertragen:

Wert Bedeutung
selfDeclared Die veröffentlichende Person oder Organisation stellt die Angaben selbst bereit.
technicallyRecorded Die Angaben wurden im Erstellungs- oder Veröffentlichungsprozess technisch protokolliert.
signed Die Erklärung wurde digital signiert; Herkunft und Unverändertheit können geprüft werden.
verified Die Angaben wurden nach einem dokumentierten Verfahren zusätzlich verifiziert.

Eine digitale Signatur bestätigt die Herkunft und Integrität der Erklärung, nicht automatisch die inhaltliche Richtigkeit ihrer Angaben. Nicht zutreffende Nachweisstufen sollten nicht ausgewählt werden.

Entwicklung und Prüfung

go test .\...
go vet .\...

Der eingebundene, reine Laufzeit-Client wird separat geprüft:

Set-Location .\third_party\license-platform-client
go test .\...

Gesamtprüfung über Make:

make check

Projektgrenze

Im Hauptprojekt verbleiben ausschließlich:

  • ein eingebetteter öffentlicher Trust Store;
  • ein verifikationsfähiger Client;
  • Feature- und Limit-Abfragen;
  • optionaler signierter Lease-Cache.

Nicht enthalten sind:

  • private Schlüssel;
  • Keygen oder Lizenzsignierung;
  • Lizenzportal oder Admin-API;
  • Lizenzdatenbank;
  • Widerrufsverwaltung oder Lease-Signierung.

Diese Funktionen werden nur in der eigenständigen Universal License Platform betrieben.

Art.-50-Kontext (Schema 1.2)

Optional kann legalContext den rechtlich relevanten Veröffentlichungskontext als Selbsteinordnung dokumentieren: deepfake, publicInterestText, artisticCreativeSatiricalFictional oder otherVoluntary. Der Generator nutzt diese Angaben für eine vorsichtige, nicht bindende Einschätzung und für eine eindeutigere Erstkennzeichnung. Ein Deepfake ist dabei nicht jedes KI-generierte Bild. Die Einordnung muss durch den Publisher anhand des konkreten Inhalts und Veröffentlichungskontexts erfolgen.

Bei publicInterestText berücksichtigt die Einschätzung, ob eine substanzielle inhaltliche Prüfung (editorial oder expert) und eine ausdrücklich benannte editorialResponsibility dokumentiert sind. Bei einer als wahrscheinlich kennzeichnungspflichtig eingeordneten Nutzung erzeugt der Badge eine unmittelbar verständliche Beschriftung statt nur „Artikeltransparenz“. Im emoji-Modus ergänzt der generierte Einbettungscode bei solchen Fällen zusätzlich sichtbaren Text.

Description
No description provided
Readme MIT 2.2 MiB
Languages
Go 85.8%
HTML 9.9%
JavaScript 3.6%
Dockerfile 0.3%
Makefile 0.2%
Other 0.2%