2.0.2 Update und Anpassungen
release-tag / release-image (push) Failing after 1m38s

This commit is contained in:
2026-07-24 10:08:19 +02:00
parent 0a3700cd8b
commit 6e152a5121
38 changed files with 1756 additions and 98 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Mehrsprachige Hintergrundseite
Version 2.0.0 stellt unter `/background` eine eigenständige Informationsseite zur KI-Kennzeichnung und zu Artikel 50 des EU AI Act bereit.
Version 2.0.2 stellt unter `/background` eine eigenständige Informationsseite zur KI-Kennzeichnung und zu Artikel 50 des EU AI Act bereit.
## Routen
+13 -2
View File
@@ -1,6 +1,6 @@
# Bulk API
Der Bulk-Dienst ist für Publisher, CMS-Integrationen, Agenturen und andere Server-to-Server-Workflows gedacht.
Der Bulk-Dienst ist für Publisher, CMS-Integrationen, Agenturen und andere professionelle Workflows gedacht. Er stellt sowohl eine browserbasierte Bulk Workspace als auch die serverseitige API bereit.
## Capability
@@ -29,7 +29,18 @@ BULK_REQUIRE_API_KEY=true
API_ALLOWED_ORIGIN=
```
Damit enthält die Angriffsoberfläche keine Generator-, Produkt- oder Hintergrundseite.
Der dedizierte Modus enthält bewusst keine öffentliche Generator-, Produkt- oder Hintergrundseite, stellt aber die spezialisierte Bulk Workspace unter `/` und `/bulk` bereit. Die eigentliche Verarbeitung erfolgt weiterhin über denselben authentifizierten API-Endpunkt.
## Bulk Workspace
Die browserbasierte Oberfläche ist erreichbar unter:
```text
/
/bulk
```
Sie bietet einen visuellen Mehrfach-Workflow, einen erweiterten JSON-Modus, Ergebnislinks sowie JSON-/CSV-Export. Details stehen in [`BULK-WORKSPACE.md`](BULK-WORKSPACE.md).
## Authentifizierung
+69
View File
@@ -0,0 +1,69 @@
# Bulk Workspace
Der dedizierte Bulk-Modus stellt neben `POST /v1/bulk/declarations` wieder eine browserbasierte Arbeitsoberfläche bereit.
## Routen
```text
GET /
GET /bulk
POST /v1/bulk/declarations
```
Die Oberfläche ist für interne Publisher-, Agentur- und Enterprise-Workflows gedacht. Sie ersetzt die API nicht, sondern verwendet denselben Endpunkt.
## Visueller Workflow
Im Standardworkflow werden Inhalte zeilenweise angegeben:
```text
article-1001 | https://example.org/articles/1001
article-1002 | https://example.org/articles/1002
```
Alternativ genügt eine URL pro Zeile. IDs werden dann automatisch erzeugt.
Ein gemeinsames Artikelprofil kann u. a. festlegen:
- Text, Titelbild, weitere Bilder, Recherche, Übersetzung und Code;
- KI-Anteil und menschliche Prüfung pro Bereich;
- Nachweisgrundlage;
- relevante Artikel-50-Angaben;
- redaktionelle Verantwortung.
## Erweiterter JSON-Modus
Heterogene Daten können als regulärer Bulk-Request eingefügt werden. Dadurch können einzelne Artikel vollständig unterschiedliche Parameter erhalten.
## API-Key
Ist `BULK_REQUIRE_API_KEY=true`, fragt die Oberfläche den Schlüssel lokal ab. Er wird nur im `sessionStorage` des aktuellen Browser-Tabs gehalten und als `Authorization: Bearer ...` an den Bulk-Endpunkt gesendet.
Der Schlüssel wird nicht serverseitig in HTML eingebettet und nicht in Exportdateien übernommen.
## Ergebnisse
Die Oberfläche zeigt pro Datensatz:
- ID;
- Validierungsstatus;
- technische Artikel-50-Einordnung;
- Link zur Erklärung;
- Link zum JSON-LD-Manifest;
- Badge-Link;
- Validierungsfehler.
Das Gesamtergebnis kann als JSON oder CSV exportiert werden.
## Sicherheitsmodell
Der dedizierte Container behält die 2.0-Sicherheitsdefaults:
```text
SERVICE_MODE=bulk
REQUIRE_LICENSE=true
BULK_REQUIRE_API_KEY=true
API_ALLOWED_ORIGIN=
```
Die Oberfläche ist deshalb kein Ersatz für Netzwerksegmentierung. Für externe Veröffentlichung sollte weiterhin ein TLS-Reverse-Proxy bzw. API-Gateway mit zusätzlicher Authentifizierung eingesetzt werden.
+94
View File
@@ -0,0 +1,94 @@
# Runtime configuration
`.env.example` is the canonical and complete reference for environment-based runtime configuration in version 2.0.2.
The application deliberately does **not** support the former `SALES_URL` or `PRICE_*` variables. Pricing and Pro advertising were removed from the public UI; dead configuration keys are not kept for compatibility.
## HTTP and identity
- `LISTEN_ADDRESS`
- `BASE_URL`
- `OUTPUT_BASE_URL`
- `PUBLIC_NAME`
- `CONTACT_URL`
- `DEFAULT_LANGUAGE`
- `HEALTHCHECK_URL`
- `SERVICE_MODE`
- `API_ALLOWED_ORIGIN`
## Proxy, logging and transport security
- `TRUST_PROXY`
- `TRUSTED_PROXY_CIDRS`
- `LOG_CLIENT_IP`
- `ENABLE_HSTS`
- `REQUIRE_LICENSE`
- `WHITE_LABEL`
`TRUST_PROXY=true` is rejected unless at least one valid CIDR is configured. Forwarded client-IP headers are only considered when the direct peer address is inside one of those networks.
`LOG_CLIENT_IP=false` keeps client addresses out of structured request logs.
`ENABLE_HSTS=true` emits `Strict-Transport-Security: max-age=31536000; includeSubDomains`; enable it only on deployments that are actually HTTPS-only.
## Prometheus
- `METRICS_ENABLED`
- `METRICS_TOKEN`
- `METRICS_TOKEN_FILE`
Metrics are disabled by default. When enabled, a bearer token of at least 32 characters is mandatory. A configured `METRICS_TOKEN_FILE` has priority over `METRICS_TOKEN`.
## Operator, privacy and accessibility pages
The following settings feed `/legal`, `/privacy` and `/accessibility` in `full` and `bulk` mode:
- `LEGAL_STRICT`
- `LEGAL_NAME`
- `LEGAL_ADDRESS`
- `LEGAL_REPRESENTATIVE`
- `LEGAL_EMAIL`
- `LEGAL_PHONE`
- `LEGAL_REGISTER`
- `LEGAL_REGISTER_NUMBER`
- `LEGAL_VAT_ID`
- `EDITORIAL_RESPONSIBLE_NAME`
- `EDITORIAL_RESPONSIBLE_ADDRESS`
- `DATA_PROTECTION_CONTACT`
- `HOSTING_PROVIDER`
- `HOSTING_ADDRESS`
- `LOG_RETENTION`
- `DATA_RECIPIENTS`
- `THIRD_COUNTRY_TRANSFERS`
- `SUPERVISORY_AUTHORITY_NAME`
- `SUPERVISORY_AUTHORITY_URL`
- `CONSUMER_DISPUTE_STATUS`
- `CONSUMER_DISPUTE_BODY`
- `CONSUMER_DISPUTE_URL`
- `ACCESSIBILITY_CONTACT`
- `ACCESSIBILITY_STATUS`
`LEGAL_STRICT=true` is a deployment guard, not a legal-compliance determination. It prevents startup if the core operator/privacy data is empty or still contains common placeholder markers. The pages themselves explicitly state that they do not replace legal review.
## Runtime licensing
- `LICENSE_TOKEN`
- `LICENSE_TOKEN_FILE`
- `LICENSE_INSTANCE_ID`
- `LICENSE_MODE`
- `LICENSE_SERVER_URL`
- `LICENSE_CACHE_FILE`
- `LICENSE_REFRESH_INTERVAL`
- `LICENSE_REQUEST_TIMEOUT`
The application contains no licence issuer, private signing key or configurable issuer public key. Licence creation remains external in the Universal License Platform.
## Bulk
- `BULK_MAX_ITEMS`
- `BULK_MAX_BODY_BYTES`
- `BULK_REQUIRE_API_KEY`
- `BULK_API_KEY`
- `BULK_API_KEY_FILE`
The `bulk_items` licence limit can further reduce the effective item count. A configured `BULK_API_KEY_FILE` has priority over `BULK_API_KEY`.
+1 -1
View File
@@ -16,7 +16,7 @@ Initialization is performed in `internal/app/server.go`. The product ID and embe
```go
licenses := licenseclient.New(ctx, licenseclient.Config{
Product: "ai-disclosure-standard",
ClientVersion: "2.0.0",
ClientVersion: "2.0.2",
Token: cfg.LicenseToken,
TrustStore: trustStore,
BaseURL: cfg.BaseURL,
+1 -1
View File
@@ -119,7 +119,7 @@ Anfrage:
"baseUrl": "https://ai.example.org",
"host": "ai.example.org",
"instanceId": "production-eu-1",
"clientVersion": "2.0.0"
"clientVersion": "2.0.2"
}
```
+13
View File
@@ -0,0 +1,13 @@
# Operator, privacy and accessibility pages
Version 2.0.2 provides multilingual operator pages in `full` and `bulk` mode:
- `/legal` (`/imprint` is an alias)
- `/privacy`
- `/accessibility`
All eight application languages are supported through `?lang=de`, `?lang=en`, `?lang=fr`, `?lang=es`, `?lang=it`, `?lang=nl`, `?lang=pt` and `?lang=pl`. Each page emits language-alternate metadata.
These routes remain reachable when `REQUIRE_LICENSE=true` and the runtime licence is unavailable, so legally relevant operator information does not disappear because of a licensing incident. Their static assets are exempt for the same reason.
The content is generated from environment configuration. Empty optional fields are not rendered. `LEGAL_STRICT` can be used as a production deployment guard, but it does not assert that every field required by every jurisdiction is present.