feat: law-source-eurlex 0.1.0 (source.eu-recht)
All checks were successful
CI / Linux x86_64 (Forgejo) (push) Successful in 1m45s

Fetch one EU legal act from EUR-Lex by CELEX number and return its
FORMEX-4 XML content-addressed (SHA-256), so a flow's audit trail
pins the exact Gesetzesstand it processed.

- CELLAR content negotiation (application/xml;type=fmx4) on
  publications.europa.eu; 303 multiple-choice item selection
- host-pinned redirect handling (max 3 hops), 64 MB body cap
- consolidated CELEX (0...-YYYYMMDD) yields consolidation_date
- net permission pinned to publications.europa.eu; no auth
- 10 unit tests (no network), wasm32-wasip2 build green

Signed-off-by: flemming-it <sf@flemming.it>
This commit is contained in:
flemming-it 2026-07-17 00:29:06 +02:00
commit 0e768ae6db
16 changed files with 1726 additions and 0 deletions

77
module.yaml Normal file
View file

@ -0,0 +1,77 @@
schema_version: 3
provider: chain
name: law-source-eurlex
version: 0.1.0
# Capability provided by this module.
#
# Fetches one EU legal act from EUR-Lex by CELEX number and returns
# the FORMEX-4 XML body content-addressed (SHA-256), so a flow's
# audit trail pins the exact Gesetzesstand it processed. Public
# EUR-Lex data only — no authentication, no personal data.
provides:
- capability: source.eu-recht
version: 0.1.0
inputs:
celex:
type: text
description:
en: |
CELEX identifier of the act, e.g. 32016R0679 (GDPR) or the
consolidated form 02016R0679-20160504. An optional CELEX:
prefix and lowercase letters are accepted.
de: |
CELEX-Nummer des Rechtsakts, z. B. 32016R0679 (DSGVO) oder
konsolidiert 02016R0679-20160504. Optionales CELEX:-Präfix
und Kleinbuchstaben werden akzeptiert.
language:
type: text
optional: true
description:
en: |
Two-letter EUR-Lex language code (DE default; EN, FR, …).
Validated against the 24 official-language codes.
de: |
Zwei-Buchstaben-Sprachcode von EUR-Lex (Standard DE; EN,
FR, …). Wird gegen die 24 Amtssprachen-Codes geprüft.
outputs:
formex:
type: bytes
description:
en: |
FORMEX-4 XML body as served by EUR-Lex
(application/xml). Feed into text.akoma-normalize (0.2+)
for the structured Akoma-Ntoso-aligned representation.
de: |
FORMEX-4-XML wie von EUR-Lex geliefert (application/xml).
Für die strukturierte Akoma-Ntoso-Darstellung an
text.akoma-normalize (0.2+) weiterreichen.
meta:
type: json
description:
en: |
JSON-encoded SourceMeta:
{
schema_version: "0.1",
celex: "32016R0679",
language: "DE",
url: "https://eur-lex.europa.eu/legal-content/…",
source_sha256: "…", // hash of the fetched bytes
byte_len: 123456,
consolidation_date: "2016-05-04" // only for 0…-YYYYMMDD CELEX
}
source_sha256 is the versioning anchor: the same CELEX can
legitimately re-render upstream; the hash makes that visible.
de: |
JSON-codiertes SourceMeta (Felder s. EN). source_sha256 ist
der Versionsanker: derselbe CELEX kann upstream neu gerendert
werden; der Hash macht das sichtbar statt still.
# Permissions required.
#
# One pinned host: the module talks to the EU Publications Office
# (CELLAR — the store behind EUR-Lex) and nothing else.
permissions:
- "net: publications.europa.eu"