Filed by Claude (AI assistant) on jmchilton's behalf — not authored by them personally.
License → redistribution-policy table
Proposed shared decision backing the new guiding principle Redistributed Content Carries Its License (#3). This table is the one piece of logic the two instances (workflow foundry, statistical-genomics foundry) must keep identical even though they share no UI/code layer: it maps a normalized license ID to whether the Foundry may carry the source verbatim into a cast artifact or must carry it own-words only, and what obligations ride along.
It assumes the enum-plus-escape-hatch decision: license is an SPDX identifier, or a LicenseRef-<slug> custom ref for anything not in SPDX. Free-text license strings are migrated to IDs first; this table is what the IDs then mean.
Engineering policy, not legal advice. The rows encode the discipline this project chooses; genuinely novel or high-stakes licenses should get real review before verbatim redistribution.
The table
| SPDX / Ref ID |
License |
Redistribution policy |
Casting transform |
Obligations if carried |
license_file |
MIT |
MIT |
verbatim-ok |
verbatim or condensed |
attribution + license notice |
required |
Apache-2.0 |
Apache 2.0 |
verbatim-ok |
verbatim or condensed |
attribution + notice + preserve NOTICE |
required |
BSD-2-Clause |
BSD 2-Clause |
verbatim-ok |
verbatim or condensed |
attribution + notice |
required |
BSD-3-Clause |
BSD 3-Clause |
verbatim-ok |
verbatim or condensed |
attribution + notice + no-endorsement |
required |
AFL-3.0 |
Academic Free License 3.0 |
verbatim-ok |
verbatim or condensed |
attribution + notice |
required |
CC-BY-4.0 |
CC BY 4.0 |
verbatim-ok |
verbatim or condensed |
attribution (title/author/source/license/changes) |
required |
GPL-2.0-only GPL-3.0-only |
GPL |
verbatim-ok ⚠ copyleft |
verbatim only |
notice + same-license + source availability; isolate in its own file, do not blend into permissively-licensed prose |
required |
LGPL-3.0-or-later |
LGPL |
verbatim-ok ⚠ copyleft |
verbatim only |
notice + LGPL terms; isolate as above |
required |
CC-BY-NC-SA-2.0 (and *-NC-*, *-SA-* family) |
CC BY-NC-SA 2.0 |
own-words-only (policy) |
condensed / own-words |
attribution + citation; verbatim carry avoided so NC + share-alike don't propagate into the KB |
not required |
LicenseRef-arXiv-nonexclusive-distrib-1.0 |
arXiv non-exclusive distribution 1.0 |
own-words-only |
own-words |
citation; arXiv's grant does not give third parties a redistribution right |
not required |
LicenseRef-all-rights-reserved |
All rights reserved / read-only manuscript (e.g. NIH-PA on PMC) |
own-words-only |
own-words |
citation only |
not required |
| (unresolved / missing) |
— |
own-words-only + defect |
own-words |
must be resolved to a real ID before any verbatim carry |
— |
Global rules (apply across all rows)
- Functional-strings carve-out. Equations, parameter names, API/function/package names, numeric thresholds, and enum values are reproduced verbatim as facts regardless of the row's policy — facts and short functional identifiers are not copyrightable expression. "own-words-only" constrains prose, never the facts.
- Default-deny. A source with no resolved license ID is treated as
own-words-only; asking casting to carry a verbatim / redistributed reference without a license ID is a build error, not a warning.
- own-words is not a copyleft launder. Paraphrasing covers expression; it does not touch the underlying ideas/facts (which are free to use anyway). Do not use own-words to sidestep copyleft — for GPL/LGPL, either carry verbatim-with-license or don't carry it. The gray zone isn't worth it.
license_file tracks verbatim carry. Required whenever content is carried verbatim (Tier: permissive + CC-BY + copyleft); not required for own-words-only sources (no text is being redistributed), which instead must carry a citation/attribution.
- The Foundry's own content is out of scope. This table governs third-party content the Foundry passes through. The Foundry's authored notes are covered by the root project license and are never conflated with passed-through material.
How casting uses it
The row's Casting transform column is the enforcement hook: a reference's transform mode (verbatim vs condensed) must be compatible with its license row. Casting refuses a verbatim transform on an own-words-only license. This is what turns the principle from advice into an enforced check, and it reuses the transform-mode field Molds already carry.
Open questions
- CC-BY-NC-SA: verbatim redistribution is permitted non-commercially with share-alike, but the table recommends own-words-only to keep the KB uniformly licensed and avoid NC/SA propagation. Confirm — stat-gen already treats the MSMB textbook (CC-BY-NC-SA-2.0) as own-words, so this matches current practice. Keep as policy, or allow opt-in verbatim under NC?
- Copyleft at all? Do we permit GPL/LGPL content in a cast artifact given license-contamination of the otherwise-permissive output, or downgrade GPL to
own-words + cite only? Current call: allow verbatim, isolated in its own file with its license.
- Enum maintenance: curated enum (extend as new licenses appear) vs validate against the full SPDX license list. Curated +
LicenseRef- escape is the pragmatic default.
- Canonical home + sync: where does this table live authoritatively, and how do the two repos stay in sync — hand-copied data file with a pointer comment in each, or a shared package later? Drift here means the principle means different things in each instance, so changes should be flagged in both repos' review.
Follow-ups this unblocks (tracked separately, per-repo)
- Schema: enum +
LicenseRef- escape in meta_schema.yml (workflow) and content.config.ts (stat-gen).
license / license_file into _provenance.json (workflow now; stat-gen when its cast layer lands).
- Foreground licenses in the workflow foundry UI (build the renderer; crib stat-gen's
SourceMeta.astro + lib/licenses.ts as reference).
- Tag
vendored_upstreams.yml entries with license at sync time.
principles-in-action.md needs an 8th concrete incarnation once instance application is decided.
License → redistribution-policy table
Proposed shared decision backing the new guiding principle Redistributed Content Carries Its License (#3). This table is the one piece of logic the two instances (workflow foundry, statistical-genomics foundry) must keep identical even though they share no UI/code layer: it maps a normalized license ID to whether the Foundry may carry the source verbatim into a cast artifact or must carry it own-words only, and what obligations ride along.
It assumes the enum-plus-escape-hatch decision:
licenseis an SPDX identifier, or aLicenseRef-<slug>custom ref for anything not in SPDX. Free-text license strings are migrated to IDs first; this table is what the IDs then mean.The table
license_fileMITApache-2.0NOTICEBSD-2-ClauseBSD-3-ClauseAFL-3.0CC-BY-4.0GPL-2.0-onlyGPL-3.0-onlyLGPL-3.0-or-laterCC-BY-NC-SA-2.0(and*-NC-*,*-SA-*family)LicenseRef-arXiv-nonexclusive-distrib-1.0LicenseRef-all-rights-reservedGlobal rules (apply across all rows)
own-words-only; asking casting to carry a verbatim / redistributed reference without a license ID is a build error, not a warning.license_filetracks verbatim carry. Required whenever content is carried verbatim (Tier: permissive + CC-BY + copyleft); not required forown-words-onlysources (no text is being redistributed), which instead must carry a citation/attribution.How casting uses it
The row's Casting transform column is the enforcement hook: a reference's transform mode (
verbatimvscondensed) must be compatible with its license row. Casting refuses averbatimtransform on anown-words-onlylicense. This is what turns the principle from advice into an enforced check, and it reuses the transform-mode field Molds already carry.Open questions
own-words + cite only? Current call: allow verbatim, isolated in its own file with its license.LicenseRef-escape is the pragmatic default.Follow-ups this unblocks (tracked separately, per-repo)
LicenseRef-escape inmeta_schema.yml(workflow) andcontent.config.ts(stat-gen).license/license_fileinto_provenance.json(workflow now; stat-gen when its cast layer lands).SourceMeta.astro+lib/licenses.tsas reference).vendored_upstreams.ymlentries with license at sync time.principles-in-action.mdneeds an 8th concrete incarnation once instance application is decided.