From 06ed3c79b576065bffed412c67020c91302877af Mon Sep 17 00:00:00 2001 From: anierbeck Date: Sun, 25 Oct 2026 13:57:02 +0100 Subject: [PATCH] State that one IRI denotes one record and references cross record types Settled on dev@ ("Resolving references on read, and what one IRI can stand for"): an IRI denotes exactly one record, of one type, for its whole life. The new section "One IRI, one record" says so, says the id names the record and not the model or dataset it describes, and states that references resolve across record types, with the referenced record's current state reported when the referencing record is read (one hop, status only, nothing stored). A custodyChain agent may now be the id of any Sourcelume record, including a TrainingProvenanceRecord. The schemas are unchanged: an agent is an IRI either way, and data that validated still does. Apache-ai: Yes Generated-by: pi (claude-sonnet-5-5) Reviewed-by: anierbeck --- CHANGELOG.md | 6 ++++++ spec/0.0.1/index.md | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64e1ea9..0bf6127 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,12 @@ described in `VERSIONING.md`. ### Changed +- A `custodyChain` agent may be the `id` of any Sourcelume record, including a + `TrainingProvenanceRecord`, no longer only of a `ProvenanceRecord`. Data that validated before + still does; the schemas are unchanged. +- New section "One IRI, one record": an IRI denotes exactly one record, of one type, for its whole + life; references resolve across record types, and a Registry reports the referenced record's + current state when the referencing record is read (one hop, status only). - Namespace moved to the stable `https://sourcelume.apache.org/ns#`. The context URL stays versioned (`/context/0.0.1/`). - The JSON Schema accepts only the canonical context IRI as `@context`. Inline context objects diff --git a/spec/0.0.1/index.md b/spec/0.0.1/index.md index 129fa5e..b62a4c9 100644 --- a/spec/0.0.1/index.md +++ b/spec/0.0.1/index.md @@ -72,9 +72,11 @@ Each `custodyChain` entry's `agent` is an IRI. That IRI may point to either: - an opaque external identifier with no corresponding Sourcelume record (e.g. a organization's homepage, a DOI, a repository URL), or -- the `id` of another Sourcelume `ProvenanceRecord`. +- the `id` of another Sourcelume record: a `ProvenanceRecord`, or a + `TrainingProvenanceRecord` when the agent is a model that processed the data + (for example, one that rewrote it). -When `agent` refers to another `ProvenanceRecord`, that upstream record's own +When `agent` refers to another Sourcelume record, that upstream record's own provenance is **not** nested or embedded inside the current record. A consumer who wants to trace further back resolves `agent` as a reference — for example, via the Registry's query API — to a separately-signed record of its own. @@ -104,6 +106,16 @@ node's full data using standard JSON-LD node inlining, rather than a bare `@id` reference. This is a serialization choice available to any JSON-LD consumer already, and does not require any change to this schema. +### One IRI, one record + +An IRI denotes exactly one record, of one type, for the whole life of that record. The `id` names +the record, not the thing the record describes: an `agent` that is the `id` of a +`TrainingProvenanceRecord` refers to that record, not to the model itself. + +References between records (`custodyChain[].agent`, `trainingData[].dataset`) are by IRI alone +and resolve across record types. A Registry reports the current state of the record a reference +names when the referencing record is read: one hop, status only, nothing stored in either record. + ## TrainingProvenanceRecord A `ProvenanceRecord` says where a dataset came from. It says nothing about which models were