Skip to content

fix(supply-chain): separate MIT and bundled-font licenses - #270

Draft
seonghobae wants to merge 4 commits into
mainfrom
fix/license-detection-269
Draft

fix(supply-chain): separate MIT and bundled-font licenses#270
seonghobae wants to merge 4 commits into
mainfrom
fix/license-detection-269

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Closes #269.

Product boundary

This Draft separates the root software license from bundled-font license evidence without changing either license. LICENSE is exact canonical MIT text for the Inkspan software. Noto Sans attribution and complete OFL-1.1 terms remain in src/fonts/NOTICE and src/fonts/OFL.txt. The npm manifest remains license: MIT and continues to package both root LICENSE and src/fonts.

Test-first lineage

Protected base is the unchanged release candidate main@a430b1c153702de3b6439def801732d7453b4940.

  1. Test-only head 961597fe6431452a8ba89d513b6ae236abcc2e9f required exact canonical root MIT text while separately requiring Noto/OFL evidence.
  2. CI run 31589849372 failed at the intended root-license assertion: the protected root file contained canonical MIT text plus an appended bundled-font section. The font attribution and OFL assertions passed.
  3. Production commit c3ce70a527e19c06e41b7d82d369ee8fd5fa402d removed only the appended bundled-font section from root LICENSE.
  4. The package evidence was then strengthened to require manifest license: MIT plus LICENSE and src/fonts in the npm files contract.

Exact current-head evidence

  • exact current head: b2c6b6eb7b9638051688939b722a1094c97da013;
  • CI 31590591645: success on this exact head, including the canonical license, separate font terms, package-manifest evidence and existing repository acceptance suite;
  • Security Scan 31590591555: queued at the latest inspection and not counted as passing;
  • SAST Semgrep 31590591516: queued at the latest inspection and not counted as passing;
  • predecessor-head checks/reviews do not transfer.

Invariants preserved

  • MIT grant, disclaimer, copyright and year;
  • Noto Sans attribution and complete OFL-1.1 text;
  • package runtime behavior, versions, dependencies, exports and host authority;
  • npm inclusion of root software license and bundled-font artifacts;
  • no claim that an active PR proves protected-main GitHub license detection.

This is machine-readable supply-chain evidence and license-file separation, not a license change or legal advice.

Integration boundary

Keep Draft and unmerged while #118 owns the unchanged protected 0.6.0 candidate. After later protected integration, operational acceptance must verify GitHub identifies the repository software license as MIT and that the published npm artifact still contains both MIT and OFL evidence. Exact-head Security/Semgrep, current review, zero valid unresolved findings, independent approval and all repository gates remain required before any eventual merge decision.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9f85fd33-f2b1-43f2-ab04-de29eef1077e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Contributor Author

Exact-current-head read-only review request for b2c6b6eb7b9638051688939b722a1094c97da013 against frozen protected base main@a430b1c153702de3b6439def801732d7453b4940.

Direct exact-head gates are complete: CI 31590591645, Security Scan 31590591555, and SAST Semgrep 31590591516 all succeeded; current unresolved inline threads and formal reviews are zero. Review the narrow license-evidence separation only: exact canonical MIT root text, retained Noto/OFL attribution and complete terms, npm license: MIT, package inclusion of LICENSE and src/fonts, and absence of unintended runtime/version/dependency/export changes.

@coderabbitai review
@opencode-agent review
@cwl-noema-review review
@strix review

Review only. Do not mutate the branch, dispatch repair writers, reuse predecessor/stale/synthetic evidence, or synthesize author approval. Bind findings and verdicts to this exact unchanged head.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='b2c6b6eb7b9638051688939b722a1094c97da013'
base='a430b1c153702de3b6439def801732d7453b4940'

echo '== Revision identities =='
git rev-parse HEAD
git cat-file -t "$head"
git cat-file -t "$base"
git merge-base --is-ancestor "$base" "$head" && echo 'base-is-ancestor=yes' || echo 'base-is-ancestor=no'

echo '== Changed paths and diff summary =='
git diff --name-status "$base" "$head"
git diff --stat "$base" "$head"
git diff --check "$base" "$head"
git diff -- "$base" "$head" -- LICENSE package.json src/fonts/NOTICE src/fonts/OFL.txt 2>/dev/null || true

echo '== Root LICENSE canonical MIT comparison =='
expected="$(mktemp)"
cat > "$expected" <<'EOF'
MIT License

Copyright (c) 2026 Inkspan Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
EOF
if diff -u "$expected" LICENSE; then
  echo 'root-license-canonical-mit=yes'
else
  echo 'root-license-canonical-mit=no'
fi
rm -f "$expected"

echo '== Font-license evidence =='
printf 'NOTICE Noto occurrences: '
rg -n -i 'Noto(\s+Sans)?' src/fonts/NOTICE || true
printf 'OFL reserved-font-name occurrences: '
rg -n 'Reserved Font Name|Noto Sans' src/fonts/OFL.txt || true
printf 'OFL version markers: '
rg -n 'SIL OPEN FONT LICENSE|Version 1\.1|PREAMBLE|TERMS AND CONDITIONS' src/fonts/OFL.txt || true
wc -l src/fonts/NOTICE src/fonts/OFL.txt

echo '== npm manifest evidence =='
jq '{license, files, version, dependencies, devDependencies, exports, main, module, types}' package.json
echo '== Package-related changed manifest fields =='
git diff -U0 "$base" "$head" -- package.json

echo '== Non-scope changes excluding license evidence =='
git diff --name-only "$base" "$head" -- . ':!LICENSE' ':!package.json' ':!src/fonts/NOTICE' ':!src/fonts/OFL.txt'

Length of output: 8196


🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='b2c6b6eb7b9638051688939b722a1094c97da013'
base='a430b1c153702de3b6439def801732d7453b4940'

echo '== Test structure =='
ast-grep outline src/licenseBoundary.test.ts --items all

echo '== Added test content =='
cat -n src/licenseBoundary.test.ts

echo '== License content at base and head =='
echo '-- base LICENSE --'
git show "${base}:LICENSE" | cat -n
echo '-- head LICENSE --'
git show "${head}:LICENSE" | cat -n

echo '== Corrected canonical MIT comparison =='
expected="$(mktemp)"
cat > "$expected" <<'EOF'
MIT License

Copyright (c) 2026 ContextualWisdomLab

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
EOF
diff -u "$expected" LICENSE && echo 'root-license-canonical-mit=yes'
rm -f "$expected"

echo '== Exact package contract comparison =='
for key in version license dependencies devDependencies peerDependencies optionalDependencies exports main module types files; do
  before="$(git show "${base}:package.json" | jq -c --arg key "$key" '.[$key]')"
  after="$(git show "${head}:package.json" | jq -c --arg key "$key" '.[$key]')"
  if [ "$before" = "$after" ]; then
    printf '%s=unchanged\n' "$key"
  else
    printf '%s=CHANGED\n' "$key"
  fi
done

echo '== Test references to requested evidence =='
rg -n -C 2 'LICENSE|MIT|NOTICE|OFL|Noto|package\.json|license|files|src/fonts' src/licenseBoundary.test.ts

Length of output: 10800


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/inkspan'
head='b2c6b6eb7b9638051688939b722a1094c97da013'

echo '== Exact-head GitHub Actions runs =='
for run_id in 31590591645 31590591555 31590591516; do
  gh api "repos/${repo}/actions/runs/${run_id}" \
    --jq '[.id, .name, .head_sha, .status, .conclusion] | `@tsv`'
done

echo '== Retained OFL text has no changes from the protected base =='
git diff --quiet a430b1c153702de3b6439def801732d7453b4940 "$head" -- src/fonts/OFL.txt \
  && echo 'ofl-unchanged-from-base=yes' \
  || echo 'ofl-unchanged-from-base=no'

Length of output: 1082


🤖 web_search executed:

Official SIL Open Font License Version 1.1 full text plain text

Length of output: 10588


🏁 Script executed:

#!/bin/bash
set -euo pipefail

reference="$(mktemp)"
repository_terms="$(mktemp)"
reference_terms="$(mktemp)"
trap 'rm -f "$reference" "$repository_terms" "$reference_terms"' EXIT

curl --fail --silent --show-error --location \
  'https://openfontlicense.org/open-font-license-official-text/OFL.txt' \
  -o "$reference"

echo '== Official reference identity =='
sed -n '1,20p' "$reference"

echo '== Compare standard OFL-1.1 terms =='
sed -n '/^SIL OPEN FONT LICENSE Version 1\.1 - 26 February 2007$/,$p' \
  src/fonts/OFL.txt > "$repository_terms"
sed -n '/^SIL OPEN FONT LICENSE Version 1\.1 - 26 February 2007$/,$p' \
  "$reference" > "$reference_terms"

if diff -u "$reference_terms" "$repository_terms"; then
  echo 'ofl-standard-terms-exact=yes'
else
  echo 'ofl-standard-terms-exact=no'
fi

Length of output: 1154


🏁 Script executed:

#!/bin/bash
set -euo pipefail

page="$(mktemp)"
trap 'rm -f "$page"' EXIT

curl --fail --silent --show-error --location \
  --user-agent 'Mozilla/5.0 (compatible; CodeRabbit review)' \
  'https://openfontlicense.org/open-font-license-official-text/' \
  -o "$page"

echo '== Official OFL page title and text-download candidates =='
rg -n -i -C 1 '<title>|OFL\.txt|plaintext|plain text|download' "$page" | head -n 120

Length of output: 6977


🏁 Script executed:

#!/bin/bash
set -euo pipefail

reference="$(mktemp)"
repository_terms="$(mktemp)"
reference_terms="$(mktemp)"
trap 'rm -f "$reference" "$repository_terms" "$reference_terms"' EXIT

curl --fail --silent --show-error --location \
  --user-agent 'Mozilla/5.0 (compatible; CodeRabbit review)' \
  'https://openfontlicense.org/documents/OFL.txt' \
  -o "$reference"

sed -n '/^SIL OPEN FONT LICENSE Version 1\.1 - 26 February 2007$/,$p' \
  src/fonts/OFL.txt > "$repository_terms"
sed -n '/^SIL OPEN FONT LICENSE Version 1\.1 - 26 February 2007$/,$p' \
  "$reference" > "$reference_terms"

echo '== Official reference header =='
sed -n '1,16p' "$reference"
echo '== Exact standard-terms comparison =='
if diff -u "$reference_terms" "$repository_terms"; then
  echo 'ofl-standard-terms-exact=yes'
else
  echo 'ofl-standard-terms-exact=no'
fi

Length of output: 2344


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== Trailing whitespace in bundled OFL text =='
rg -n '[ \t]+$' src/fonts/OFL.txt || true

Length of output: 379


@seonghobae No findings from this exact-head review.

I reviewed b2c6b6eb7b9638051688939b722a1094c97da013 against main@a430b1c153702de3b6439def801732d7453b4940.

  • LICENSE is exact canonical MIT text with the existing ContextualWisdomLab copyright.
  • Noto attribution remains in src/fonts/NOTICE.
  • The complete OFL-1.1 terms remain in src/fonts/OFL.txt. The file is unchanged from the base. It has one pre-existing trailing space on Line 25, but the terms are complete.
  • package.json remains license: "MIT". Its files contract includes both LICENSE and src/fonts.
  • Versions, dependencies, exports, and package entry points are unchanged.
  • Only the root license and the license-boundary test changed.
  • CI 31590591645, Security Scan 31590591555, and SAST Semgrep 31590591516 each completed successfully on this exact head.

I kept this review distinct from protected-main verification and approval authority, as required by the repository guidance.


🧠 Learnings used
Learnt from: CR
Repo: ContextualWisdomLab/inkspan PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-08-12T02:30:49.287Z
Learning: Formal review, automated review, repository checks, host authorization, and release evidence remain distinct authorities.

Learnt from: CR
Repo: ContextualWisdomLab/inkspan PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-08-12T02:31:03.922Z
Learning: Do not infer shipped behavior from conversation history, PR bodies, model output, or predecessor-head evidence. Keep Proposed/Active-PR behavior distinct from implementation on Protected `main`, preserve fail-closed security and deterministic conversion boundaries, and update the smallest affected canonical documents plus tests when a durable contract changes.
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(supply-chain): separate root MIT license from bundled font notices

1 participant