원클릭으로
qv-notice-generate
Generate NOTICE files with third-party attributions for all packages in the monorepo.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Generate NOTICE files with third-party attributions for all packages in the monorepo.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Team-wide PR dashboard for the SDK pod. Shows open PRs touching SDK pod paths or authored by SDK roster members, sorted oldest-first, grouped by author tier (SDK Core / Platform / External) into needs-your-re-review / stale / needs-review / fully-approved, with merge-conflict and CI-red warnings. Use when checking team SDK pod PR status or invoking /qv-sdk-pr-status.
Generate changelogs for SDK pod packages using tag-based GitFlow. Use when preparing a release, generating changelog, or creating CHANGELOG_LLM.md.
Inspect GitHub Actions self-hosted runner queues when a developer provides a run URL, job URL, runner label, or reports a blocked CI job, or invokes /qv-devops-runner-queue.
Benchmark an optimization (PR or branch) on a Device Farm device via the vlm-benchmark framework — baseline vs optimized, quality-regression-aware.
Generate PR descriptions for SDK pod packages following template and format rules. Use when creating an SDK pod PR or invoking /qv-sdk-pr-create.
Update and verify the QVAC coding-agent package stack across @qvac/sdk, @qvac/cli, @qvac/ai-sdk-provider, and @qvac/opencode-plugin. Use when syncing CLI to a newer SDK release, preparing agent-stack package releases, or checking OpenCode / AI SDK provider compatibility.
| name | qv-notice-generate |
| description | Generate NOTICE files with third-party attributions for all packages in the monorepo. |
Generate deterministic, sorted NOTICE files for individual packages or all packages at once, covering model, JS, Python, and C++ dependency attributions.
As of QVAC-21554, license/compliance enforcement on Tier-1 PRs is primarily a CI gate — .github/workflows/license-compliance.yml, delegating to the org reusable workflow public-reusable-license.yml (design: tetherto/qvac-actions/docs/license-compliance-ci.md). The gate deterministically classifies newly added PR dependencies against the org policy (allow/deny/review), honours .github/license-allowlist.yml, and posts a PR comment.
This SKILL is now the human fallback for the long tail the gate cannot decide:
check-forbidden-licenses.js to investigate, then record the decision in .github/license-allowlist.yml (CODEOWNERS-reviewed) or remove/replace the dependency. The gate is deterministic from then on.check-forbidden-licenses.js does a real npm install + license-checker (plus Python/C++/model scans) and is the tool for a complete audit — e.g. before a release, or when the gate's coverage is insufficient.generate-notice.js job.Use when:
/qv-notice-generateBefore running, ensure .env is sourced and contains:
GH_TOKEN -- GitHub token (access to private repos and GitHub API)HF_TOKEN -- HuggingFace token (model license verification)NPM_TOKEN -- npm registry token (private package resolution)System requirements for Python scanning:
python3 and pip available in PATH (for pip-licenses)--all for all packages).env in the shell--dry-run if the user explicitly asks for itDo NOT commit changes. The user will review and commit manually.
source .env
node .cursor/skills/qv-notice-generate/scripts/generate-notice.js <package-dir-name>
Example: node .cursor/skills/qv-notice-generate/scripts/generate-notice.js sdk
For registry sub-packages use the full path:
registry-server/clientregistry-server/sharedsource .env
node .cursor/skills/qv-notice-generate/scripts/generate-notice.js --all
source .env
node .cursor/skills/qv-notice-generate/scripts/generate-notice.js --all --dry-run
node .cursor/skills/qv-notice-generate/scripts/generate-notice.js sdk --dry-run
In dry-run mode:
source .env
node .cursor/skills/qv-notice-generate/scripts/check-forbidden-licenses.js --all --dry-run
node .cursor/skills/qv-notice-generate/scripts/check-forbidden-licenses.js --all
Uses an allowlist approach. The ALLOWED_LICENSES array in config.js controls which licenses pass:
License strings from all sources (npm, PyPI, GitHub, models) are normalized to canonical SPDX ids before comparison, so adding apache-2.0 to the list automatically covers Apache 2.0, Apache Software License, Apache License 2.0, etc.
If violations are found, writes FORBIDDEN_LICENSES.txt to the repo root and exits with code 1.
Important: The agent should NOT edit ALLOWED_LICENSES directly. Present the scan results to the user and let them decide which licenses to allow. The allowlist and normalization map live in .cursor/skills/qv-notice-generate/scripts/constants.js.
node .cursor/skills/qv-notice-generate/scripts/generate-report.js
Reads existing NOTICE files across all packages (no scanning, no tokens needed) and produces NOTICE_FULL_REPORT.txt with:
NOTICE file inside each scanned package directory (from generate-notice.js)NOTICE_FULL_REPORT.txt license overview report (from generate-report.js, gitignored)NOTICE_LOG.txt at the repo root with errors/warnings (gitignored)| Type | What | Tool |
|---|---|---|
| Models | Model attributions from models.prod.json | Direct JSON parsing |
| JS | Production npm dependencies | license-checker (auto-installed via npx) |
| Python | Benchmark/script Python deps | pip-licenses (auto-installed in temp virtualenv) |
| C++ | vcpkg native dependencies | GitHub API + local portfile parsing |
sdk, registry-server/clientpackage.jsonrequirements.txt or pyproject.toml in benchmarks/scriptsvcpkg.json| Package directory | Engine |
|---|---|
embed-llamacpp | @qvac/embed-llamacpp |
llm-llamacpp | @qvac/llm-llamacpp |
translation-nmtcpp | @qvac/translation-nmtcpp |
tts-onnx | @qvac/tts-onnx |
transcription-whispercpp | @qvac/transcription-whispercpp |
ocr-onnx | @qvac/ocr-onnx |
diffusion-cpp | @qvac/diffusion-cpp |
All entries within every NOTICE file section are sorted deterministically using locale-independent collation. Re-runs on identical input always produce identical output, resulting in clean git diffs.
npm run verify:licenses in packages/registry-server -- verifies model licenses in models.prod.json against HuggingFace/GitHub APIs (dry-run only, console output, fails on unverifiable)..cursor/skills/qv-notice-generate/scripts/constants.js.cursor/skills/qv-notice-generate/scripts/lib/config.js.cursor/rules/sdk/sdk-pod-packages.mdc