Dependency Management¶
KiCad MCP Pro uses reviewable dependency declarations, lockfiles, audit jobs, and pinned release infrastructure to reduce supply-chain risk.
Dependency sources¶
| Ecosystem | Primary files | Policy |
|---|---|---|
| Python | pyproject.toml, uv.lock |
Use uv lockfiles and review dependency updates through pull requests. |
| Node / npm / pnpm | package.json, pnpm-lock.yaml, package-level lockfiles |
Use lockfiles and Corepack-managed package managers. |
| Docker | Dockerfile |
Pin base images by digest and avoid unpinned package-manager bootstrap steps. |
| GitHub Actions | .github/workflows/*.yml |
Pin third-party Actions to full commit SHAs and keep job permissions minimal. |
| Rust / Tauri | Cargo manifests and lockfiles where present | Keep generated lockfiles under version control when used for release artifacts. |
Automated update ownership¶
GitHub Dependabot is the single normal dependency-update source for this repository.
.github/dependabot.yml covers the root uv project, npm/pnpm package locations,
GitHub Actions, Docker/Docker Compose, and the Tauri Cargo project. Renovate is not
part of the active update path, so the repository does not keep a second bot
configuration that could create duplicate update pull requests.
Routine version-update checks stay weekly but are staggered across the Europe/Istanbul maintenance window so independent updater jobs do not create a burst of pull requests and full CI runs at the same time:
| Updater | Scope | Weekly window |
|---|---|---|
| uv | / |
Monday 04:00 |
| npm/pnpm | / |
Monday 12:00 |
| npm | /integrations/chatgpt-app/apps-sdk |
Tuesday 04:00 |
| npm/pnpm | /packages/kicad-fixtures |
Tuesday 12:00 |
| npm | /packages/mcp-npm |
Wednesday 04:00 |
| Cargo | /src-tauri |
Wednesday 12:00 |
| GitHub Actions | / |
Thursday 04:00 |
| Docker | / |
Friday 04:00 |
| Docker Compose | / |
Friday 12:00 |
Each updater limits its version-update backlog to two open pull requests and applies a five-day cooldown before newly released versions are eligible. GitHub's cooldown and open-pull-request limit apply to version updates, not Dependabot security updates, so vulnerability remediation is not delayed by this backpressure policy.
Routine version updates are grouped per ecosystem and package-manager boundary to
reduce PR and CI churn. Minor/patch groups are eligible for automation; major updates
are grouped separately to avoid one-PR-per-package bursts but remain manual review. The
npm/pnpm configuration uses separate single-directory entries for the root pnpm project,
the ChatGPT Apps npm project, the fixture pnpm package, and the npm wrapper so Dependabot
does not mix independent lockfile/workspace scopes in one update job. Docker version
automation is more conservative: only patch updates are eligible for automation; runtime-sensitive
image minor/major changes are grouped separately for explicit maintainer review. Security
updates use separate groups and are never mixed with routine version-update groups.
Because GitHub does not apply open-pull-requests-limit to security updates, these
security groups are the repository's primary control against security-update PR fan-out.
Dependabot pull requests are ordinary protected pull requests: required CI and the
main ruleset still apply, and no dependency bot is allowed to bypass those gates.
Mergify provides a serial, one-PR-at-a-time queue for routine grouped minor/patch updates
and grouped non-major security updates. The queue explicitly mirrors every required
status-check context from .github/rulesets/main.json, requires zero unresolved review
threads, and requires each named check to report literal success. The Sonar workflow
returns an explicit successful no-op for Dependabot, fork, and release-metadata-only pull
requests while keeping checkout, coverage, and SONAR_TOKEN behind the trusted-analysis
condition. Eligibility and required-check conditions are identical at
queue and merge time so strict up-to-date rulesets use Mergify's in-place check model
instead of a second draft-PR CI phase. Automatic GitHub ruleset discovery is
defense-in-depth rather than the enforcement source. Repository regression tests prevent
ruleset/check or queue/merge-condition drift. The queue uses squash merges and does not
retry failed checks automatically.
Human-authored, release, major-version, runtime-sensitive, and otherwise non-routine
dependency pull requests remain a maintainer decision.
Lockfile maintenance¶
When a supported dependency update changes resolution, Dependabot updates the matching manifest and lockfile together where the ecosystem supports it. The tracked lockfiles remain authoritative build inputs:
- Python:
pyproject.toml+uv.lock; - pnpm/npm:
package.json+pnpm-lock.yamlor the package-localpackage-lock.json; - Rust/Tauri:
src-tauri/Cargo.toml+src-tauri/Cargo.lock.
Lockfile-only refreshes that are not caused by an available dependency version are a maintainer task and must use the repository's pinned toolchain. CI uses frozen/locked installs and therefore rejects stale or unexpectedly regenerated lockfiles.
Update process¶
- Dependabot opens a grouped routine update, grouped major/manual update, or grouped security update from the default branch.
- Review the dependency source, package name, version change, release notes, and license impact.
- Run the required CI, security checks, tests, and relevant package builds.
- Confirm the matching lockfile changed only as expected.
- Grouped minor/patch version updates and grouped non-major security updates may enter the Mergify queue only after every required check reports literal success and all review threads are resolved.
- Major/manual, runtime-sensitive, release, human-authored, and otherwise non-routine updates require an explicit maintainer merge decision.
Vulnerability monitoring¶
Dependabot alerts and Dependabot security updates own automated vulnerable-dependency
remediation. Dependency audit scripts, CodeQL, Gitleaks, Trivy, and Scorecard provide
additional detection and policy evidence. Security-sensitive updates should be
prioritized according to SECURITY.md.
Vendoring and generated code¶
Vendored code and generated artifacts should be avoided unless there is a clear release or interoperability reason. If unavoidable, document:
- upstream source and version;
- license;
- update procedure;
- verification command;
- reason the dependency cannot be consumed through normal package management.
Release dependency evidence¶
Release workflows should produce SBOMs, checksums, and provenance evidence when supported by the artifact class. See ../security/release-security.md and ../security/release-integrity.md.