--- name: license description: Decide what may be carried over from a prey repository under its license. Modes are COPY, COPY_FILE, REIMPLEMENT, IDEAS_ONLY and HUMAN. Use when a nutrient's license mode is unclear, when asked whether code or configs from another repository may be copied, or when a sniff verdict says HUMAN. Do not use to choose the maw's own license, for general legal advice, or for licensing questions unrelated to prey-to-maw transfer. --- # License rules The verdict is produced by a deterministic engine (`crab sniff`, `license.json` in a digest). Your job is to apply the mode, explain it, and stop when the engine says `HUMAN`. ## Modes | Mode | Allowed | Required | |---|---|---| | `COPY` | copy code, configs and text | keep the copyright notice; publish through `crab serve --as pr-branch` with a materialization receipt (the `serve` skill), which records the source in `.crab/attributions.json` and renders `THIRD_PARTY_NOTICES.md`; Apache-2.0 also needs the NOTICE file's attribution notices carried over | | `COPY_FILE` | copy whole files (MPL-2.0, EPL, CC-BY-SA documents) | the file keeps its own license header; do not merge it into files under the maw license; every file in the receipt is verbatim | | `REIMPLEMENT` | use the prey as a specification | clean room: a spec without code, then the `crab-cleanroom-impl` subagent without prey-cache access; record "implemented from a specification" in the trace | | `IDEAS_ONLY` | ideas, architecture, approaches, facts | not a line of code, configuration or documentation text | | `HUMAN` | nothing yet | a person decides; present the evidence (`license.json`: files, manifests, headers, conflicts) | ## Rules that override the matrix 1. Issue, discussion and pull-request comment text is always `IDEAS_ONLY`: the copyright belongs to the commenters. Carry over the need and a link, not the text. The CLI enforces this from content origin, records the origin and cap reason in the nutrient trace, and `crab serve` carries that trace into the served issue; do not recalculate the cap by hand. The cap rewrites the card's title and `what`; your `why` and `how` are yours to keep clean, and `crab serve` refuses a card of any origin but `licensed` whose notes quote one of the prey's issue titles, in any punctuation or case, or whose notes cannot be checked. 2. Configuration files and small snippets are not automatically free: same mode as code. 3. **Strict mode is enforced by the CLI.** `.crab.yml` `mode: strict` downgrades `COPY` code to clean-room `REIMPLEMENT`; configs and templates stay copyable. `menu.json` records the material, maw mode and policy reason, and served issues carry the reason in their license trace. Use that verdict and the clean-room protocol; do not calculate or reverse the downgrade by hand. 4. Per-file exceptions in `license.json` (vendored directories, headers with another SPDX id) override the repository license for those files. 5. **No license at all is `IDEAS_ONLY` with human review, not `HUMAN`.** `HUMAN` is only for a license that was read and could not be classified. The two ask for different things: under `IDEAS_ONLY` the need and the facts may still travel, under `HUMAN` nothing may until a person answers. 6. **Review is a flag, not a mode.** A conflict between the LICENSE file and a manifest does not change the verdict — the mode still comes from the detected license, and the digest records the conflict in `license.json` under `conflicts` with `human_review: true` beside it. Read both: `human_review` is also true for a source-available license, whose mode is `IDEAS_ONLY`. ## How to compute a mode - `crab sniff --maw .` prints the mode for this maw. - `license.json` in the prey digest has `modes_by_maw_class` (permissive, gpl, proprietary maws) and `verdict` when a maw license was known at digest time. `mode_maw_samples` names the representatives: `gpl` is GPL-3.0-only, not the whole GPL family. Use the actual maw's verdict for adoption decisions. - The full matrix is in `references/matrix.md`. This is a compliance aid, not legal advice; say so when the user asks about an edge case.