bubbles-supply-chain-source-locking

Locks build-time dependency resolution to an explicit allowlist of trusted registries and sources.

1|Updated Mar 17, 2026
One-click install
npx skills add https://github.com/pkirsanov/bubbles --skill bubbles-supply-chain-source-locking-pkirsanov
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: bubbles-supply-chain-source-locking
Source: https://github.com/pkirsanov/bubbles/tree/main/skills/bubbles-supply-chain-source-locking
Command: npx skills add https://github.com/pkirsanov/bubbles --skill bubbles-supply-chain-source-locking-pkirsanov

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Builds can silently pull dependencies from arbitrary registries, extra indexes, git sources, or fall-through proxies, exposing projects to dependency-confusion, typosquatting, and malicious-mirror attacks. This Skill enforces a blocking policy so a dependency can only enter the build from a source you explicitly allowed. ## Core Features & Use Cases - Source Allowlist Enforcement: Requires an explicit, reviewed allowlist of trusted registries/sources with no implicit fall-through and no bypass flags. - Per-Ecosystem Wiring: Concrete configurations for Rust (cargo-deny [sources]), Node (pinned .npmrc registry + npm ci), Go (pinned GOPROXY, -mod=readonly, go.sum verification), and Python (single --index-url, hash-pinned requirements). - Blocking Gate Integration: Wires the ecosystem-native source check into each repo's existing lint/pre-push gate as a blocking, non-skippable step. - Use Case: When reviewing a PR that adds a new external dependency or registry, use this Skill to verify the source is on the allowlist, the lockfile is committed, and no checksum-disable knobs (like GOINSECURE or --trusted-host) were introduced. ## Quick Start Ask the agent to audit the repository's dependency manifests and package-source configuration against the supply-chain source locking policy and report any un-allowlisted resolution sources.

Frequently Asked Questions about bubbles-supply-chain-source-locking

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I prevent dependency confusion attacks in my build?▼

Lock dependency resolution to a single explicit allowlist of trusted registries and forbid extra indexes or fall-through proxies. For pip, avoid --extra-index-url to un-allowlisted hosts; for Go, pin GOPROXY without an open ,direct fall-through; for Rust, set cargo-deny unknown-registry and unknown-git to deny.

How do I configure cargo-deny to allow only trusted registries?▼

In deny.toml, set unknown-registry = "deny" and unknown-git = "deny", then populate allow-registry with exactly one trusted index such as sparse+https://index.crates.io/. Leave allow-git empty by default so every git dependency is an explicit reviewed exception, and wire cargo deny check sources into the blocking lint gate.

Does artifact signing with cosign or SLSA replace dependency source locking?▼

No, provenance and source locking are complementary controls on different axes. Signing verifies the built artifact is authentic before deploy, while source locking governs where code enters the build; a signed image built from a typosquatted dependency still ships compromised code.

Why is pip --extra-index-url a security risk?▼

pip resolves the highest version across all configured indexes, so a public typosquat of an internal package name at a higher version wins over the private index. Use a single --index-url with hash-pinned, version-pinned requirements instead, and allowlist any internal index explicitly.

Can I add a bypass flag to skip the dependency source check?▼

No, the source check must be blocking with no --skip, --force, or --allow-once escape hatch, since the first skip tends to become the permanent path. A legitimately new trusted source is added by editing the allowlist as a reviewed config change.

What Go settings are forbidden under source locking?▼

Checksum-disable knobs such as GONOSUMCHECK, GONOSUMDB, GOINSECURE, and a permissive GOPRIVATE covering public modules are forbidden because they defeat source verification. Builds should use GOFLAGS=-mod=readonly, a pinned GOPROXY, and go.sum verification in the gate.