gitlab-ai-hackathon / transcend-october-2026 / dep-bouncer
Dep Bouncer on GitLab
GitLab Duo agents take an issue to production with no human, vet every npm package first, replace hijacked dependencies with clean versions, and restore production when it drifts. Every figure links to the public receipt, merge request or pipeline it comes from.
Verify in 3 clicks
- The newest issue receipt: issue to production, every step linked, human actions counted.
- Every change the agents shipped: minutes and human actions per run.
- Attack day: four replayed hijacks, each blocked and replaced by a clean version in production.
Three agent-driven paths
Each run's receipt counts any human action after it started.
- Feature. A person creates an issue and assigns it to the Autopilot. The agents plan, build with vetted dependencies, pass the merge policy, land, release through staging and production, and post a receipt.
- Attack. A merge request pulls in a hijacked release. The gate blocks it; the Dependency Guardian quarantines it, opens a confidential security issue and ships a clean version the same way.
- Incident. The scheduled monitor finds production serving the wrong build. The Production Responder opens an incident, restores production through the normal pipeline and verifies it.
- Agents are a target too. Asked to switch to an AI-recommended package, the Autopilot checked it first, found npm had removed it as malware, and refused (#11).
Changes taken to production by agents
Minutes and human actions come from each public receipt. Runs without a public receipt show no duration or count.
| Change | Started by | Minutes | Human actions | Release | Production build |
|---|---|---|---|---|---|
| Use chalk@6.0.1 instead of chalk@5.6.1 | Blocked MR !8 | 14.8 | 0 | v1.1.42 | 89d6ac5b |
| Use @ctrl/tinycolor@4.2.1 instead of @ctrl/tinycolor@4.1.1 | Blocked MR !12 | 86.5 | 1 | v1.1.59 | 6b97aa2d |
| Back the semver module with the standard semver package | Issue | 18.4 | 0 | v1.1.64 | 71316ce2 |
| Upgrade checks with a range or dist-tag lose the change details | Issue | 18.5 | 0 | v1.1.105 | 1101797b |
| Colour the verdict counts in the benchmark summary | Issue | 17.6 | 0 | v1.1.115 | 1f8e6e0d |
| Some npm security placeholders are reported as ALLOW | Issue | 16.7 | 0 | v1.1.132 | f4f9b6d4 |
| Manifest checks report ALLOW for dependencies they could not check | Issue | 20.0 | 0 | v1.1.142 | a241f2cb |
| A new install hook can activate unchanged code that is never scanned | Issue | 28.1 | 0 | v1.1.152 | 08d5f2d0 |
| Use keyv@6.1.0 instead of keyv@6.0.0 | — | — | — | landed and deployed; no public receipt | — |
| Use axios@1.20.0 instead of axios@1.14.1 | — | — | — | landed and deployed; no public receipt | — |
| Support a YAML policy file for verdict thresholds | — | — | — | landed and deployed; no public receipt | — |
Attack day
Labelled, benign reconstructions of real hijacks; nothing malicious is downloaded. Minutes from the attack MR to the first failed pipeline, the first Guardian note and production.
| Hijack | Attack MR | Blocked | Quarantined | Clean replacement | In production | Merged by |
|---|---|---|---|---|---|---|
@ctrl/tinycolor@4.1.1 | !12 | 1.1 | 24 | Use @ctrl/tinycolor@4.2.1 instead of @ctrl/tinycolor@4.1.1 | 38.7 | ai-dep-bouncer-guardian-gitlab-ai-hackathon |
chalk@5.6.1 | !8 | 1.1 | 2.5 | Use chalk@6.0.1 instead of chalk@5.6.1 | 17.3 | ai-dep-bouncer-guardian-gitlab-ai-hackathon |
keyv@6.0.0 | !6 | 1 | 2.4 | Use keyv@6.1.0 instead of keyv@6.0.0 | — | ai-dep-bouncer-guardian-gitlab-ai-hackathon |
axios@1.14.1 | !2 | 1 | 4.2 | Use axios@1.20.0 instead of axios@1.14.1 | — | ai-dep-bouncer-guardian-gitlab-ai-hackathon |
Incidents
Minutes run from the failed monitor pipeline that started the successful Responder session to the verified served build. An earlier session for the same drift was failed by the platform before its first step.
Lifecycle stages
All nine stages ran for real; each row links to a run.