Skip to content

ci: refuse to commit reMarkable's libqsgepaper.so - #27

Open
m4ndolore wants to merge 1 commit into
MaximeRivest:mainfrom
m4ndolore:ci-vendor-guard-upstream
Open

ci: refuse to commit reMarkable's libqsgepaper.so#27
m4ndolore wants to merge 1 commit into
MaximeRivest:mainfrom
m4ndolore:ci-vendor-guard-upstream

Conversation

@m4ndolore

Copy link
Copy Markdown

quill links against reMarkable's vendor display library. The library itself is reMarkable's property and must be extracted from a device the user owns — it must never be redistributed in this repository.

This PR adds:

  • scripts/ci/check-no-vendor-blob.sh — filename, path, and ELF-content scan over tracked and staged files
  • scripts/ci/install-hooks.sh — pre-commit hook
  • .github/workflows/no-vendor-blob.yml — same check on push/PR, plus a full-history scan

No app, UX, or rM2-port changes. .gitignore already covers quill/vendor/ and quill/build/; this is the backstop for git add -f, a renamed blob, or a downstream copy that forgets the ignore rule.

See quill/README.md and quill/CLEANROOM.md for the clean-room boundary this protects.

quill/ is a clean-room MIT implementation that links against reMarkable's
libqsgepaper.so, but that library is theirs. Users extract it from a device
they own (quill/build.sh fetches it over SSH); we never redistribute it.

.gitignore covers quill/vendor/ and quill/build/, but that protection does
not survive `git add -f`, a renamed blob, or a downstream repository that
copies quill/ without the ignore rules. This adds the backstop:

- scripts/ci/check-no-vendor-blob.sh — filename, path, and ELF content scan
  over tracked and staged files
- scripts/ci/install-hooks.sh — pre-commit hook, so a leak is stopped before
  it enters history rather than after
- .github/workflows/no-vendor-blob.yml — the same check on every push and PR,
  plus a full-history scan for the library by name and size
- scripts/ci/README.md — what it catches and what to do when it fires

Documentation under quill/vendor/ stays allowed; that directory legitimately
holds a README explaining how to fetch the library. The library is matched by
name and content, not by location.

Verified: passes a clean tree and a vendor README; fails the blob committed
by name, renamed elsewhere in the tree, and quill/build/ output; the hook
blocks the commit; full history is clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.

1 participant