Spec changelog
Unreleased
Section titled “Unreleased”0.3.0 - 2026-11-03
Section titled “0.3.0 - 2026-11-03”- Moved the hosted-service key rules and management API out of the spec. The spec keeps per-part read and write access and the refusal bodies.
- Command-line login endpoints are found through RFC 8414 OAuth metadata,
not fixed paths. A server MAY list a
whoami_endpointthere. - Removed lens, co-owner and Privacy page wording.
- Every dynamic list returns
{results, pagination}. Profiles and seed papers page by number, papers by token.page_sizeis clamped, never refused.GET /profilesfilters onrid,clinicalandaffiliation; an unknown query parameter is a 400.
0.2.0 - 2026-10-12
Section titled “0.2.0 - 2026-10-12”Command-line login endpoints moved. Device login now follows the OAuth 2.0
Device Authorization Grant (RFC 8628) exactly, at POST /api/auth/device and
POST /api/auth/token, replacing /api/manage/cli-auth and its poll route.
A stock OAuth device-flow client works unchanged.
Full text tier is a default. paper_fulltext is no longer held at a fixed
floor; its tier is a default the owner can change. Artifact tier reports drop
locked and lock_reason.
Per-part access. Reads and writes by apps and account keys are decided per part
(a none, read, or write table, plus a “Replace whole profiles” switch),
with an insufficient_access refusal body.
New read routes. The dynamic API gains record views, paged lists (cursor,
next_cursor, has_more), full text and narrative in bounded pages
(/text), and passage search (/passages). Profile files are served beside
profile.jsonld.
Sections and new artifacts. Visibility can be set per section of the profile
document, including a clinical section. Interview self-reports and clinical
trials are new artifact roles. Profiles can carry rid aliases, so an old slug
still resolves after a merge, and an ORCID login proof.
Research interests. New rp:researchInterests entries record what a person
works on. Each entry links the person to one concept (coded, or text-only with
unmapped: true) with an optional signed weight from -1 to 1 (missing means
unknown, 0 means declared neutral), plus method, generator, assertedAt
and optional evidence. interests
and not_interests are rebuilt from the entries that count by precedence.
The recommended vocabularies (OpenAlex topics, then MeSH, then text-only) and
their system URIs are in Vocabularies. The context
(context/v1.jsonld) gains the SKOS, Weighted Interest Ontology and PROV
mappings for these entries; no existing term changes meaning.
Visibility tiers renamed. The three tiers are now public, limited, and
private (were public, internal, and restricted), ordered
public < limited < private. limited means readers the owner or host has
granted access; private means the owner and agents acting for the owner.
The old names are rejected, with no aliases: validation names the
replacement. Privacy gains a
mapping to the EU access-right, COAR and ORCID vocabularies, and the context
expands visibility values to rp:Public, rp:Limited, and rp:Private,
each a skos:closeMatch to those terms. Served manifest entries carry
accessRights (dcterms:accessRights), the EU IRI of the entry’s effective
tier; it is derived at serve time and never stored.
Push modes. PUT /profiles/{slug} with an archive takes a mode query
parameter that says what happens to live files the archive omits: replace
(the default; keeps a withheld class, full text or the search index, that the
archive carried none of), merge (keeps every omitted file), or prune
(deletes every omitted file). Kept files are spliced back into the manifest.
The push response gains kept, spliced, manifest_counts, and mode.
GET /capabilities lists the accepted modes and features so a client can
check before it pushes. The old line that full text “is stripped on ingest”
now says what is true: a server that does not accept full text drops incoming
sources/papers/ members, but keeps the full text it already holds.
Text artifacts. paper_fulltext and paper_summary files must be readable
text: valid UTF-8, no NUL, no more than 1% U+FFFD and 2% control characters
(tab, newline, and carriage return excepted), and no raw PDF body. The
conformance suite already enforced this (invalid/garbled-fulltext); the
spec now states it, as Base conformance rule 7.
Chunk tiers. A chunk’s tier is now the most restrictive of the profile
default, the role default, and its source artifact’s effective tier, so a tier
set on one file or on the soul section reaches its chunks. The rule applies
to every serve-time use of a chunk, including the /match score and its
evidence (Embeddings §6).
0.1.0 - 2026-09-25
Section titled “0.1.0 - 2026-09-25”Initial specification release. The version tracked here is independent of the
package versions (rp-sdk, scholarcore), which follow the SDK’s own release
cadence. A profile’s conformsTo names the context major version (the fixed
IRI ending in context/v1.jsonld), and the conformance suite gates on that
IRI; this file tracks prose revisions within that major version. Pre-1.0
versions MAY introduce incompatible changes between minor increments with no
shims and no deprecation period.
Includes POST /identity/resolve and the resolve app scope.