بنقرة واحدة
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