sourcelume-registry)The Apache Sourcelume Registry persists, indexes, and queries signed Sourcelume provenance records for AI training datasets.
Per the dev-list consensus (September 2026, thread “Apache Sourcelume Registry repo creation, and initial discussion”) the codebase is organized as a framework-independent Core/API with Runtime modules layered on top:
AtlasAdapter SPI; only Sourcelume types in the interface, no backend SDK types in the coreRecordValidator SPI in the core; validation stages ship as separate plugin modules discovered via ServiceLoader, wired into the Quarkus runtime (fail-on-start) and exposed as a pre-flight POST /records/validate endpoint (see docs/validation.md). The spec's record types are supported end to end: ProvenanceRecord persists as sourcelume_dataset, TrainingProvenanceRecord as sourcelume_model (see docs/ingest.md)| Module | Purpose |
|---|---|
sourcelume-registry-typedefs | Backend type definitions (JSON resources) |
sourcelume-registry-common | DTOs mapped from sourcelume-spec, Jakarta Validation annotations, exceptions, spec resource loader — framework-free (Jakarta API + Jackson only) |
sourcelume-registry-core | Backend-neutral AtlasAdapter SPI (API), the RecordValidator validation SPI, and the ingest SPI (IngestService) — no framework, no backend SDK dependencies |
sourcelume-registry-validation-jsonschema | Validation plugin: “json-schema” stage (networknt, draft 2020-12, format assertions) |
sourcelume-registry-validation-shacl | Validation plugin: “shacl” stage (Apache Jena, offline context inlining) |
sourcelume-registry-atlas-adapter | Thin REST AtlasAdapter implementation over the core SPI (JDK HttpClient), used by the Quarkus REST runtime |
sourcelume-registry-runtime-quarkus | Quarkus REST runtime: dataset and type REST APIs (/api/v1/datasets, /api/v1/types), ingest endpoints (POST /records, GET /records/{id}), pre-flight validation endpoint, startup bootstrap (spec verification + typedef registration), SmallRye Health readiness, Docker packaging |
Runtime modules build on the framework-free core as separate modules and own their framework dependencies (the Quarkus BOM is imported in the runtime module only). Validation follows the same principle: the core defines the RecordValidator chain, the plugin modules own their validation machinery (networknt, Jena) — see docs/validation.md for the architecture, the shipped stages, and the parity rationale against the Python reference validator (sourcelume-spec tools/validate.py).
Requires JDK 21 and Maven 3.9+. The sourcelume-spec artifact must be available (build apache/sourcelume-spec first with mvn install, see its SETUP.md).
mvn clean install
On Windows, see the “Running on Windows” section of dev-support/README.md for WSL2/Git Bash/PowerShell guidance.
Against a local Atlas (default http://localhost:21000, see dev-support/README.md for standing one up):
mvn -pl sourcelume-registry-runtime-quarkus quarkus:dev
Or as a container next to Atlas via the shared sourcelume-network:
mvn clean package docker compose build docker compose up -d
http://localhost:8082/q/health/readyhttp://localhost:8082/q/health/livehttp://localhost:8082/q/metricshttp://localhost:8082/q/openapihttp://localhost:8082/q/swagger-uiConfiguration lives under the sourcelume.atlas.* properties (sourcelume-registry-runtime-quarkus/src/main/resources/application.properties).
The Quarkus runtime exposes REST endpoints on port 8082:
/api/v1/datasets)Read-only views. A record is written only via POST /records; the dataset endpoints read what it stored.
# Publish a dataset record (the only way to write one) curl -s -X POST http://localhost:8082/records \ -H "Content-Type: application/ld+json" \ --data-binary @examples/simple-demo/sample-provenance-record.jsonld | jq . # Query by qualifiedName (the record's id; query parameter) curl -s "http://localhost:8082/api/v1/datasets?qualifiedName=https://sourcelume.apache.org/records/rec-glasgow-hackathon-001" | jq . # Query by internal Atlas GUID curl -s "http://localhost:8082/api/v1/datasets/guid/<ASSIGNED_GUID>" | jq .
/api/v1/types)# Inspect all registered Sourcelume typedefs curl -s http://localhost:8082/api/v1/types/typedefs | jq . # Inspect the sourcelume_dataset entity definition curl -s http://localhost:8082/api/v1/types/dataset | jq . # Inspect the sourcelume_model entity definition curl -s http://localhost:8082/api/v1/types/model | jq .
examples/simple-demo): A self-contained, automated walkthrough (referencing the Community Over Code Glasgow 2026 Hackathon) demonstrating registry health verification, Atlas typedef inspection, dataset registration, and query resolution. See examples/simple-demo/README.md.This project is licensed under Apache License, Version 2.0.