skills/mav-bp-dependency-management/SKILL.md
Dependency management conventions for all projects. Covers lock files, version pinning, vulnerability scanning, license compliance, update strategy, and minimal dependency principle. Applied when adding, updating, or reviewing dependencies.
npx skillsauth add thermiteau/maverick mav-bp-dependency-managementInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Ensure every project's dependencies are intentional, pinned, secure, and actively maintained. Dependencies are an attack surface and a maintenance burden — treat them accordingly.
Lock files guarantee deterministic builds. Without them, the same manifest can produce different installs on different machines or at different times.
package-lock.json, yarn.lock, pnpm-lock.yaml, uv.lock, poetry.lock, Pipfile.lock, Cargo.lock, go.sum, Gemfile.lock, composer.locknpm ci (not npm install), uv sync --locked, pip install --require-hashes, bundle install --frozen. CI and production must install from the lock, not resolve fresh.| Ecosystem | Manifest | Lock file | Frozen install command |
| --------- | -------- | --------- | --------------------- |
| Node (npm) | package.json | package-lock.json | npm ci |
| Node (yarn) | package.json | yarn.lock | yarn install --frozen-lockfile |
| Node (pnpm) | package.json | pnpm-lock.yaml | pnpm install --frozen-lockfile |
| Python (uv) | pyproject.toml | uv.lock | uv sync --locked |
| Python (poetry) | pyproject.toml | poetry.lock | poetry install --no-update |
| Python (pip) | requirements.txt | requirements.txt (pinned) | pip install -r requirements.txt --require-hashes |
| Rust | Cargo.toml | Cargo.lock | cargo install --locked |
| Go | go.mod | go.sum | go mod download |
| Ruby | Gemfile | Gemfile.lock | bundle install --frozen |
| PHP | composer.json | composer.lock | composer install --no-dev |
package.json, pyproject.toml) — use ranges for libraries, exact versions for applications
^1.2.0, >=1.2,<2) so consumers can resolve their own tree*, latest)Every CI pipeline must include a dependency vulnerability scan that:
| Ecosystem | Built-in / native | Third-party |
| --------- | ----------------- | ----------- |
| Node | npm audit | Snyk, Socket, Trivy |
| Python | pip-audit, safety | Snyk, Trivy |
| Rust | cargo audit | Trivy |
| Go | govulncheck | Snyk, Trivy |
| Ruby | bundler-audit | Snyk, Trivy |
| Java/Kotlin | OWASP Dependency-Check | Snyk, Trivy |
| Multi-language | — | Trivy, Snyk, Grype, Dependabot alerts |
| Tool | Ecosystems | Notes |
| ---- | ---------- | ----- |
| license-checker (npm) | Node | Checks installed packages against an allow/deny list |
| licensecheck (Go) | Go | Scans Go module dependencies |
| cargo-deny | Rust | License + vulnerability + duplicate checking |
| FOSSA | Multi-language | Commercial, comprehensive compliance platform |
| Trivy | Multi-language | Includes license scanning alongside vulnerabilities |
| ScanCode | Multi-language | Open-source, detailed license detection |
Use automated dependency update tooling to create PRs for outdated dependencies:
| Update type | Frequency | Review level | | ----------- | --------- | ------------ | | Patch (security) | Immediately when disclosed | Fast-track merge after CI passes | | Patch (non-security) | Weekly, batched | Auto-merge if CI passes | | Minor | Weekly or biweekly | Review changelog, merge if CI passes | | Major | Monthly review | Read migration guide, test thoroughly, manual merge |
Not every problem needs a package. Dependencies carry costs: maintenance, security surface, supply chain risk, bundle size, and licensing obligations.
leftPad, isOdd, flattenArray. Write them yourself.Before adding a dependency, check:
You are responsible for every package in your dependency tree, not just the ones you explicitly added.
npm ls, uv tree, cargo tree, go mod graph, pipdeptree, bundle viz to inspect the resolved graphDependencies with no active maintenance are a ticking time bomb — no security patches, no compatibility updates, no bug fixes.
Before applying these standards, load the project-specific dependency management implementation:
digraph lookup {
"docs/maverick/skills/dependency-management/SKILL.md exists?" [shape=diamond];
"Read and use alongside these standards" [shape=box];
"Invoke upskill" [shape=box];
"Read generated skill" [shape=box];
"docs/maverick/skills/dependency-management/SKILL.md exists?" -> "Read and use alongside these standards" [label="yes"];
"docs/maverick/skills/dependency-management/SKILL.md exists?" -> "Invoke upskill" [label="no"];
"Invoke upskill" -> "Read generated skill";
"Read generated skill" -> "Read and use alongside these standards";
}
docs/maverick/skills/dependency-management/SKILL.mddo-upskill skill with:
"dependencies"|"devDependencies"|requires-python|tool\.poetry|Cargo\.toml|\[dependencies\]package-lock.json, yarn.lock, pnpm-lock.yaml, uv.lock, poetry.lock, Cargo.lock, go.sum, Gemfile.lock, composer.lock, .npmrc, .nvmrc| Pattern | Issue | Fix |
| ------- | ----- | --- |
| Lock file not committed | Non-deterministic builds | Commit the lock file, use frozen install in CI |
| Lock file manually edited | Corrupted dependency resolution | Regenerate from manifest |
| New dependency for trivial functionality | Unnecessary surface area | Inline the logic or use standard library |
| Dependency with no license or copyleft license | Legal risk | Replace with a permissively licensed alternative |
| Major version bump buried in a large PR | Breaking changes may be missed | Isolate major bumps into dedicated PRs |
| * or latest in version specifiers | Unpredictable builds | Pin to a specific range |
| No vulnerability scanning in CI | Known CVEs may ship | Add npm audit / pip-audit / equivalent to pipeline |
| Dependency with no recent releases (12+ months) | Abandoned package risk | Evaluate alternatives or plan a fork |
| Large transitive dependency addition | Unexpected supply chain expansion | Investigate and consider lighter alternatives |
| --force or --legacy-peer-deps in install commands | Masking resolution conflicts | Fix the underlying version conflict |
development
--- name: do-test description: Write or update tests for a code change. Operates in two modes: `unit` (module-scoped, fast, deterministic) and `integration` (crosses module / service / database boundaries). Intended to be invoked once per testable change from inside a do-issue-* or do-epic phase. Mode is required. argument-hint: mode: unit or integration user-invocable: true disable-model-invocation: false --- **Depends on:** mav-bp-unit-testing, mav-bp-integration-testing, mav-local-verificati
development
Implement a focused code change. Use this skill as the wrapper for any implementation work so the Maverick workflow report captures what was done and so the agent applies the project's coding standards before editing. Intended to be invoked once per task from inside a do-issue-* or do-epic phase, not standalone.
testing
How to stack a PR on top of an unmerged sibling branch, and how to retarget it to the repo's default branch once the sibling merges. Prevents orphan-merge incidents when a dependent story is ready before its parent.
development
Claim, lease, heartbeat, and release protocols for when multiple Claude Code instances may act on the same issue or epic concurrently. GitHub labels and marker comments are the coordination surface; local state is a cache.