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:
- If
valid_untilis set and t is not before it, every use isfalse: an expired basis stops everything at once. - 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 overridestrueorfalse.
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.