Files
paperspec/spec/14-rights.md
T
alexm 4fa326dc76
check / check (push) Successful in 42s
site / site (push) Successful in 3m4s
First implementation (#1)
Reviewed-on: #1
2026-10-15 05:47:05 -04:00

4.3 KiB

14. Rights

What a team may do with a paper depends on how it holds the paper, and AI processing is now a use that licenses name. Every witness carries a rights record, every stage declares the uses it needs, and a stage runs only when the rights allow them. Nothing here is legal advice: the defaults are a starting point that each team reviews with its own counsel.

14.1 The rights record

scienting-rights/1:

Property Holds
license The license as stated, {spdx?, text?, url?}, or null.
basis How the team holds the right: open-license, publisher-tdm, collective-license, subscription, own-work, permission or unknown.
uses Each of read, tdm, redistribute, quote-public and accessible-copy as true, false or "unknown", and ai: a map from each pair <purpose>/<processor> to the same values.
asserted_by {by, evidence}: who or what recorded the basis, and on what: a license URL, a contract's hash, Crossref's license field, a delivery, a statement.
at, valid_until When it was recorded, and when the basis ends, or null.

Purposes are internal (results stay inside the organization) and external (results leave it). Processors are local (the team's machines), tenancy (the team's cloud account), outside-no-retention (an outside service contractually keeping nothing) and outside (one that may retain). A use or pair that is absent is "unknown". A producer sets license and a provisional basis from Crossref for open-access papers, and never sets a use to true on its own for anything else.

14.2 Effective uses

To find a witness's uses at a time t:

  1. If valid_until is set and t is not before it, every use is false: an expired basis stops everything at once.
  2. Otherwise start from the record's uses, and for each policy that applies at t, replace each "unknown" with the policy's value, where the policy has one. A policy never overrides true or false.

A policy, scienting-policy/1, is a project owner's signed decision: applies_to (any of basis, license, doi_prefixes and witnesses, all of which must match), the uses it decides, a statement, by, at and valid_until. It applies from at until valid_until.

A node established from several witnesses takes the most restrictive of their uses: false if any is false, else "unknown" if any is unknown, else true. This is the default combining rule.

14.3 Stages

scienting-stages/1 maps each stage to what it needs: a list of uses, and optionally ai, with a purpose and the processors it may run on. A stage may run on a processor when every listed use is true, the processor is among those allowed, if any are listed, and the pair ai/<purpose>/<processor> is true. When a check fails, the refusal lists what is lacking: a use or pair that is false by name, one that is unknown with a trailing ?, and a disallowed processor as processor:<name>.

registry/stages/scienting-stages-default.json holds a default set; a team replaces the file, not the code. Rights are checked when a stage runs and again whenever text is served. Every derived artifact records the rights record and use it was made under, so it can be listed and purged when a basis ends.

14.4 Backends and profiles

A backend's code and weights can be licensed differently, and the weight license may exclude commercial or competing use. scienting-backend/1 declares a backend's code_license, its weights with their licenses, and the conditions they impose:

Condition Met when the team profile
revenue-cap with usd states revenue or funding at most usd.
no-competition with vendor states what it competes with, and that does not include the vendor.
purpose with allowed states a purpose among those allowed.

scienting-profile/1 records what conditions ask: the team's purpose (research, personal, education, startup or commercial), revenue_or_funding_usd as {at_most} or null when unknown, and competes_with, or null when unknown. A condition whose answer is unknown is not met, and the gate refuses a backend with any unmet condition. rights.jsonl exercises stages, policies, expiry, combining and backends.