Skip to content
Registry stack docs v0 · draft

Registry Atlas reference

Look up capability discovery terms, asset schema, proxy settings, token handling rules, fixture paths, build commands, and CLI entry points for Registry Atlas v0.1. This reference is hand-maintained against the registry-atlas source; check the repository README if a detail looks stale.

Capability discovery accepted match inputs

Section titled “Capability discovery accepted match inputs”

The strict matcher accepts the following Term kinds in a CapabilityQuery. Evidence for these semantics is in crates/system-capability-discovery/src/matcher.rs and the test fixture crates/system-capability-discovery/tests/strict_matcher.rs.

Term kindMatched againstCanonicalization appliedNotes
Term::Label(s)Asset label text, dcterms:title, skos:prefLabel, field label propertiesWhitespace trim, Unicode normalization, case foldMatches label text in discovered metadata assets
Term::Iri(s)@type, conformsTo, property IRIs, schema $idCompact IRI expansion from known prefix mapMust match a known prefix or full absolute IRI
Term::Field(s)SchemaProperty.property_name, SchemaProperty.property_path, ShaclProperty.path, equivalent property evidenceWhitespace trim onlyMust not match arbitrary description text
Term::ReviewedMapping { mapping_set_id, mapping_id }Explicit reviewed mapping set entryNone; mapping is pre-resolvedEvery match using a reviewed mapping exposes the mapping set id and version in its evidence

The engine never applies stemming, fuzzy edit distance, semantic similarity, or unreviewed synonym expansion. See SYSTEM_CAPABILITY_DISCOVERY_SPEC.md for the full normative contract.

FieldRole in matching
requires_anyRequired information terms. At least one term must match for the need to produce a CapabilityMatch.
requires_allConjunctive terms. Every term must match the same candidate asset or route. Use when a field name alone is too generic.
about_anySubject or population context. Improves ordering and evidence explanation. Cannot produce a match by itself.
purposeProgram or use context. Can match policy or purpose evidence. Cannot produce a match by itself.
questionHuman-facing wording only. The strict matcher never searches this field.

This is the JSON you get when you export from the Evidence tab or run the CLI harvest command.

A DiscoveryRunEnvelope wraps a DiscoveryReport with host-side fetch state. Key fields at the envelope top level, sourced from fixtures/system-capability/registry-relay-all-standards.envelope.json:

FieldTypeDescription
reportDiscoveryReportThe portable evidence contract. Contains summary, assets, and artifacts.
report.summary.artifact_countintegerTotal artifacts fetched (including failed).
report.summary.asset_countintegerTotal semantic assets extracted from all artifacts.
report.summary.failed_artifact_countintegerArtifacts that could not be fetched or parsed.
report.summary.unsupported_artifact_countintegerArtifacts fetched but not recognized as a supported kind.
report.summary.parse_error_countintegerArtifacts that parsed partially with errors.
report.assetsarrayArray of SemanticAsset objects. Each has kind, id, label, and links.
report.artifactsarrayArray of FetchedArtifact objects. Each has url, status, media_type, body_bytes, hash.

A DiscoveryReport without an envelope is the portable evidence contract. Pass it to the capability query CLI or to semantic-asset-discovery-cli validate-report.

KindSource formatNotes
catalogGeneric catalog containern/a
dcat_catalogDCAT Catalogue JSON-LDdcat:Catalog class
datasetDCAT Datasetdcat:Dataset class
distributionDCAT Distributiondcat:Distribution class
data_serviceDCAT DataServicedcat:DataService class
json_schemaJSON Schema Draft 2020-12application/schema+json
shaclSHACL shapes graphRDF Turtle or JSON-LD
policyODRL policy documentodrl:hasPolicy, application/ld+json
open_apiOpenAPI 3.x specificationapplication/vnd.oai.openapi+json
api_descriptionOGC API Records or other API descriptionLanding page JSON
classRDF class definitions (RDFS, OWL, SKOS)n/a
metadata_indexOGC API Records metadata landing pagen/a

The proxy’s host-blocking behavior is documented in server/index.mjs.

RuleDefaultOverride
Private IPv4 ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)Blocked in productionATLAS_PROXY_ALLOW_LOCAL=1
Loopback (127.0.0.0/8)Blocked in productionATLAS_PROXY_ALLOW_LOCAL=1
Link-local (169.254.0.0/16)Blocked in productionATLAS_PROXY_ALLOW_LOCAL=1
IPv6 ULA (fc00::/7)Blocked in productionATLAS_PROXY_ALLOW_LOCAL=1
IPv6 link-local (fe80::/10)Blocked in productionATLAS_PROXY_ALLOW_LOCAL=1
data:, file:, ftp: schemesAlways blockedNone
Embedded credentials in URLStripped before upstream requestNone

“Production mode” means NODE_ENV=production AND ATLAS_PROXY_ALLOW_LOCAL is not "1". pnpm dev does not set NODE_ENV=production, so local targets are reachable by default.

VariableDefaultDescription
PORT3717Proxy listen port
NODE_ENVUnset (treated as non-production)When production, private-network targets are blocked unless ATLAS_PROXY_ALLOW_LOCAL=1
ATLAS_PROXY_ALLOW_LOCALUnsetSet to "1" to allow private-network targets in production mode
ATLAS_PROXY_MAX_BYTES2097152 (2 MB)Maximum upstream response size in bytes
ATLAS_PROXY_TIMEOUT_MS8000Upstream request timeout in milliseconds
ATLAS_PROXY_REDIRECT_LIMIT3Maximum HTTP redirect chain length

Error responses use Content-Type: application/problem+json.

CodeMeaning
invalid_urlTarget URL failed parsing or uses a non-HTTP/S scheme
dns_lookup_failedDNS resolution failed for target host
private_network_blockedTarget resolved to a private or loopback address in production mode
upstream_timeoutUpstream request exceeded ATLAS_PROXY_TIMEOUT_MS
response_too_largeResponse exceeded ATLAS_PROXY_MAX_BYTES
content_type_blockedResponse content type is not in the allowed set

These rules apply to bearer tokens entered in the Atlas UI. They are stated explicitly in README.md and confirmed by reviewing server/index.mjs.

  1. Tokens are accepted only in the session URL entry field.
  2. The token is forwarded to the proxy as an Authorization: Bearer <token> header.
  3. The proxy forwards the token in upstream requests only on same-origin redirects.
  4. The token is held in React component state for the duration of the browser session only.
  5. The token is never written to localStorage, sessionStorage, or IndexedDB.
  6. The proxy does not log the Authorization header.
  7. The token is discarded when the browser tab closes or the page is refreshed.
  8. No mechanism for token refresh, credential expiry, or persistence across browser restarts is implemented in v0.1.
PathKindDescription
src/fixtures/registry-relay-dcat-ap.jsonldDCAT catalog JSON-LDBundled offline demo catalog; loaded by the curated demo fixtures selector in the UI
src/fixtures/registry-relay-system-capability.envelope.jsonDiscoveryRunEnvelopeFull envelope with fetch summary, rejected fetches, and the nested DiscoveryReport for the Registry Relay all-standards demo
fixtures/system-capability/registry-relay-all-standards.report.jsonDiscoveryReportExtracted report with all asset kinds represented; used by Rust tests
fixtures/system-capability/registry-relay-all-standards.envelope.jsonDiscoveryRunEnvelopeFull envelope for the all-standards demo; used by CLI and Rust tests
fixtures/reports/dcat-ap-report.jsonDiscoveryReportDCAT-AP profile fixture report
fixtures/reports/semantic-package-report.jsonDiscoveryReportSemantic package profile fixture report
fixtures/semantic-asset-discovery/Per-standard fixture directoriesSubdirectories for breg-dcat-ap, dcat-ap, json-schema, ogc-features, ogc-records, openapi, prof, publicschema-package, registry-relay-standards, semic-shacl-turtle

The workspace ships two CLI entry points you can run with cargo.

Harvest a registry and produce a DiscoveryRunEnvelope:

Terminal window
cargo run -p semantic-asset-discovery-cli

Run a capability query against an existing envelope:

Terminal window
cargo run -p system-capability-discovery --bin system-capability-query -- \
--envelope fixtures/system-capability/registry-relay-all-standards.envelope.json \
--need-all disability_status label "Disabled Person" \
--need-all disability_status field disability_status \
--pretty

Both commands accept --help for the full option list. Full worked examples are in HOW_TO_TEST_V0_1.md.

Sourced from package.json.

CommandDescription
pnpm installInstall Node dependencies
pnpm devBuild WASM, start Vite dev server (http://127.0.0.1:5177) and Express proxy (http://127.0.0.1:3717) concurrently
pnpm serverStart Express proxy only
pnpm buildTypeScript type-check, Vite production build, WASM compile
pnpm testRun Vitest tests
pnpm lintRun ESLint
pnpm checkRun lint, tests, and production build (use before review)
pnpm check:releaseRun Rust tests, lint, tests, build, and semantic checks (full release gate)
pnpm check:rustRun Rust tests via cargo test
pnpm check:semanticRun semantic discovery validation checks
pnpm build:wasmCompile semantic-asset-discovery-wasm from Rust via wasm-pack
pnpm canonicalize:system-fixturesNormalize capability discovery fixture files