Repository navigation
Description
[agent] Found by the scheduled vlt bug-hunt routine (ledger #307).
Summary
A vlt project can install a dependency from a named registry ("left-pad": "acme:left-pad@1.3.0" with vlt.json registries.acme, DepID ~acme~left-pad@1.3.0). A hosted scan skips that package, as documented, with the warning redirect_vlt_custom_registry_skipped, which ends with "(use --mode vendored or agent mode)". Vendored mode then refuses the same package every time: vendor_lock_entry_unsupported, "…not from vlt's default registry; vendoring rewires only default-registry packages". The run exits 1 with partialFailure. Only agent mode works. In my runs it patched the copy and rolled it back cleanly.
Impact
Low severity, but the run sends the user down the wrong path. The remediation hint names a mode that can't succeed. A user (or a CI script that follows the hint) switches to vendored, gets a failed run, and still has the package unpatched. Nothing is written incorrectly: hosted leaves the node alone, and vendored refuses without writing.
Repro (vlt 1.4.0 or 1.3.8, main 657fce2; the string is identical in release 5.0.1)
Use the mock registry / patch API attached to #1494, started three times: PORT=18555, PORT=18556 (patch API) and PORT=18557 (the "acme" registry). Use the env from #1494.
mkdir proj && cd proj
echo '{"name":"root","version":"1.0.0","dependencies":{"left-pad":"acme:left-pad@1.3.0","right-pad":"1.3.0"}}' > package.json
echo '{"config":{"registries":{"npm":"http://127.0.0.1:18555/","acme":"http://127.0.0.1:18557/"}}}' > vlt.json
vlt install --allow-scripts :scripts
socket-patch scan --mode hosted --yes --json
# exit 0; left-pad: skipped redirect_unconfirmed
# warning redirect_vlt_custom_registry_skipped: "... ~acme~left-pad@1.3.0 left unchanged (use --mode vendored or agent mode)"
socket-patch rollback --yes
socket-patch scan --mode vendored --yes --json
# exit 1, partialFailure; left-pad: failed vendor_lock_entry_unsupported
# "vlt-lock.json resolves left-pad@1.3.0 as ~acme~left-pad@1.3.0, which is not from vlt's default registry; vendoring rewires only default-registry packages"Agent mode control: scan --mode agent exits 0 and require('left-pad') prints patched; rollback restores pristine.
Expected vs actual
- Expected: the hint names only modes that can patch the package.
docs/ecosystems.md(vlt, "Hosted: the slot rewrite") says such instances stay untouched (redirect_vlt_custom_registry_skipped). The vendored vlt path refuses any non-default-registry instance (vendor/vlt_lock.rs:2429), so the hint should point to agent mode only, or say vendored also refuses it. - Actual: "use --mode vendored or agent mode".
OS × version
| OS | vlt | hosted hint | vendored | agent |
|---|---|---|---|---|
| Linux | 1.4.0 | names vendored (2/2) | refused (2/2) | pass |
| Linux | 1.3.8 | names vendored | refused | (not run) |
macOS / Windows: not probed. The message is platform-independent.
The code is the same in release 5.0.1, so this isn't a regression in the current release line. I didn't bisect further.
Suspect code
crates/socket-patch-core/src/patch/redirect/vlt.rs:366-371(rewrite_dep): theredirect_vlt_custom_registry_skippeddetail text.crates/socket-patch-core/src/vendor/vlt_lock.rs:2429: the vendored refusal that the hint contradicts.
Activity
mikolalysenko commentedon Oct 16, 2026
[agent] Triaged as
priority:p1(vlt, npm family). Confirmed on main657fce2: theredirect_vlt_custom_registry_skippeddetail incrates/socket-patch-core/src/patch/redirect/vlt.rs:370says "use --mode vendored or agent mode", while vendored vlt refuses every non-default-registry DepID (vendor/vlt_lock.rs). No open PR covers it.Generated by Claude Code
mikolalysenko commentedon Oct 16, 2026
[agent] New shape from the vlt bug-hunt routine (ledger #307), on main
657fce2, vlt 1.3.8 and 1.4.0. The same hint fires for scoped registries too, and it has a second misleading warning next to it.Setup:
vlt.json{"config":{"registries":{"npm":"<reg>"},"scoped-registries":{"@sc":"<other reg>"}}}, with dependency"@sc/sp": "1.3.0"(DepID~http_c++127.0.0.1_c18557+~@sc+sp@1.3.0).scan --mode hostedexits 0 and warns:redirect_vlt_custom_registry_skipped: "… left unchanged (use --mode vendored or agent mode)".scan --mode vendoredthen exits 1 withvendor_lock_entry_unsupported("…not from vlt's default registry; vendoring rewires only default-registry packages"), the same contradiction as the named-registry case.redirect_vlt_entry_not_found: "vlt-lock.json has no default-registry entry for @sc/sp@1.3.0; runvlt installfirst". The package is already installed, and runningvlt installagain can't produce a default-registry entry for a scoped package. This hint is wrong too, and it duplicates the first warning.Agent mode patches the package and rolls it back cleanly, so it's the only mode either hint should point to. Reproduced 2× on 1.4.0 and 1× on 1.3.8.
Generated by Claude Code
mikolalysenko commentedon Oct 23, 2026
[agent] Claiming this issue (shared root cause: hosted vlt's non-default-registry skip hints name vendored mode /
vlt install, which can't patch the package). Branch: agent/fix-vlt-foreign-registry-hint. Claim-ID: 2026-10-23T01:21:00Z-2640c4Generated by Claude Code
mikolalysenko commentedon Oct 23, 2026
[agent] Draft PR: #1677
Generated by Claude Code
Point vlt foreign-registry skips to agent mode