Repository navigation
Bug hunt ledger: Bun #306
Replies: 30 comments
|
[agent] 2026-09-30: Bun bug-hunt run Tested: main Method: the patch API is unreachable from the sandbox ( This is the first run: there was no earlier ledger and no Cells
Issues
False positives ruled out
Probe
Next
|
|
[agent] 2026-10-01: Bun bug-hunt run Tested: main Method: same as run 1, with the mock rebuilt ( Re-triage (on
|
|
[agent] 2026-10-01: maintainer note: test global ( This is a maintainer request, not a run report. Add it to the top of the backlog and keep it there until the cells below are covered. Ask: make sure we correctly scan global installs when Where Bun puts global installs: What to check (prove each with a real global install, not by reading source):
Add OS × Bun version cells for |
|
[agent] 2026-10-01: Bun bug-hunt run Tested: main Method: real Re-triage (on
|
|
[agent] 2026-10-01: Bun bug-hunt run Tested: main Method: a Python mock of the authenticated patch API ( Re-triage
Cells
Issues
False positives ruled out
Blocked
Next
|
|
[agent] 2026-10-01: Bun bug-hunt run Tested: main No probe branch this run: Method: a Python mock of the patch API ( Re-triage
Cells (Linux)
Issues
False positives ruled out
Blocked
Next
|
|
[agent] 2026-10-02: Bun bug-hunt run Tested: main Method: a fresh Python mock of the org-scoped patch API ( Re-triage
Cells (Linux)
Issues
False positives ruled out
Blocked
Next
|
|
[agent] 2026-10-02: Bun bug-hunt run Tested: main Method: a fresh Python mock of the org-scoped patch API ( Re-triage
Cells (Linux): backlog item 5,
|
|
[agent] 2026-10-02: Bun bug-hunt run Tested: main Method: a fresh Python mock of the org-scoped patch API ( Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
|
|
[agent] Janitor: ledger drift. The coverage matrix still lists these issues as
This is a heads-up only. The janitor never edits ledgers. Generated by Claude Code |
|
[agent] Janitor: ledger drift. The coverage matrix still lists these issues as
This is a heads-up only. The janitor never edits ledgers. Generated by Claude Code |
|
[agent] 2026-10-02: Bun bug-hunt run Tested: main Method: a fresh Python mock of the public proxy ( Re-triage
Cells (Linux)
IssuesFalse positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-03: Bun bug-hunt run Tested: main Method: a fresh Python mock of the public proxy ( Re-triage
Cells (Linux)
IssuesFalse positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-03: Bun bug-hunt run Tested: main Method: a fresh Python mock of the public proxy ( Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-03: Bun bug-hunt run Tested: main Method: a fresh Python mock of the public proxy ( Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-03: Bun bug-hunt run Tested: main Method: a fresh Python mock of the public proxy ( Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-04: Bun bug-hunt run Tested: main Method: a new Python mock that is both an npm registry (bunfig Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-04: Bun bug-hunt run Tested: main Method: rebuilt the Python mock (npm registry + authenticated patch API + hosted tarball route, with an optional per-patch marker variant for superseding patches). New fixture rule: run the registry on a different origin (port) from Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-05: Bun bug-hunt run Tested: main Method: a fresh Python mock of the patch API (batch, by-package, view, blob, the Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-05: handover from the Yarn classic (1.x) bug-hunt routine I filed #831 (#831) for yarn classic. Vendored mode writes
With The tarball backends look like they share this, but I haven't tested bun. Please check it with a real bun install (repro shape in #831). If it reproduces, comment on #831 with your matrix rather than filing a duplicate, unless the fix clearly differs. |
|
[agent] 2026-10-05: Bun bug-hunt run Tested: main Method: the self-contained Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-05: Bun bug-hunt run Tested: main Method: the probe-workflow Re-triage
Cells (Linux)
Issues
Handover
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-06: Bun bug-hunt run Tested: main Method: a fresh local mock of the public-proxy routes ( Re-triage
Cells (Linux): all pass
Issues
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-06: Bun bug-hunt run Tested: main Method: a fresh local mock of the public-proxy routes ( Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-06: Bun bug-hunt run Tested: main Method: a fresh local mock of the public-proxy routes ( Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
Generated by Claude Code |
|
[agent] 2026-10-06: Bun bug-hunt run Tested: main Method: a fresh local mock of the authenticated org API ( Re-triage
Cells (Linux)
Issues
False positives ruled out
Next
Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
[agent] Progress ledger for the scheduled Bun bug-hunt routine (label pm:bun).
Last updated: 2026-10-06 (run 25), main
9c43dfc, latest release 4.0.0, latest Bun 1.4.2.Method (run 16 note: the sandbox shell exports
BUN_OPTIONS=--smol, so unset it; run 17 note: on Bun ≥ 1.2,bunfig [install] saveTextLockfile = falsewrites a binarybun.lockb): real Bun installs (npm@oven/bun-*or GitHub release binaries) and a local Python mock of the patch API: batch, by-package, thepatches/packagegrant,patches/viewwith blob contents,blob/<hash>, the hosted tarball route, and a/registry/passthrough forSOCKET_NPM_REGISTRY. SetSOCKET_PATCH_SERVER_URLto the mock. The oracle is the marker bytes after a fresh-checkoutbun install --frozen-lockfilewith an empty cache, plus byte comparison of the lockfiles andnode requirewhere runtime matters. The repo's own matrix (scripts/backtest-bun.py,bun-compatibility.yml) already covers plain hosted and vendored shapes across Bun 0.8.1–1.4.2. It always runs with--ignore-scriptsand never in agent mode, and it never runsvexon an isolated-linker tree. This ledger tracks what it doesn't.Run 9: #366, #405 (fixed by #496) and #469 (fixed by #472) were verified fixed on Linux. Their cells below now read pass (Linux), and the macOS/Windows cells for them are untested on the fixed main.
Run 10: #599 still reproduces on
045d7ec. New: #635 (Bun ≥ 1.3.14globalStore).Run 11 (main unchanged at
045d7ec): #599 still reproduces. No new bugs. All the new cells pass: the run 11 section below, and the vendored row of theglobalStoretable.Run 12 (main unchanged at
045d7ec, so no re-triage): no new bugs. Bun 1.1.39, the oldest release in range, is now covered and passes. All the new cells pass: the run 12 section below.Run 13 (main unchanged at
045d7ec, so no re-triage): new #720. Lockfile-only discovery can't see hosted pins, so a hosted re-run in CI never picks up a superseding patch, andscan --mode vendoredskips the takeover. Both report success. The other new cells pass: the run 13 section below.Run 14 (main unchanged at
045d7ec, so no re-triage): new #739. Abun.lockbholdingX@1.0.0+X@1.0.0-beta.1is refused as a metadata-hash mismatch, and hosted exits 0 with nothing patched (a regression since 4.0.0). Bun cells added to #626 (agent mode overwrites first-party workspace members). The other new cells pass: the run 14 section below.Run 15 (main unchanged at
045d7ec, so no re-triage): new #764. Afterrollback/vendor --revert, the advisedbun installkeeps the patched bytes on the hoisted linker. The other new cells pass: the run 15 section below.Run 16 (main unchanged at
045d7ec, so no re-triage): new #784. A vendoredbun.lockbmigrated bybun install --save-text-lockfilecan't be reverted or rolled back, and a superseding re-vendor on it drops the pre-vendor original.removeadded to #764. The other new cells pass: the run 16 section below.Run 17 (main unchanged at
045d7ec, so no re-triage): new #803. A hosted or vendored workspacebun.lockbmigrated to text by Bun 1.4.2 carries socket-patch's path-normalized workspace literals, so frozen installs fail and the unfrozen install drops the pins. The other new cells pass: the run 17 section below.Run 18 (main unchanged at
045d7ec, so no re-triage): no new bugs. #764 is confirmed on a Bun 1.2.23 hoisted workspace. A member-levelbun adddropping that member's hosted pins is Bun behaviour (see Known non-bugs). The other new cells pass: the run 18 section below.Run 19 (main unchanged at
045d7ec, so no re-triage): no new issue. The yarn-classic handover #831 reproduces on Bun: a vendored tarball covered by.gitignore(*.tgz,vendor/,.socket/) exits 0, the commit drops it, and fresh frozen installs fail. That holds on text v1/v2,bun.lockband an isolated workspace, and the Bun matrix is commented on #831.bun cireproduces #803. The other new cells pass: the run 19 section below.Run 20 (new main
6811b4e): #803, #739 and #720 were fixed by #811, #741 and #722, closed by the maintainers, and verified on Linux (#803 heal: hosted + vendored re-run; #720: lockfile-onlybun.lockbsupersede + vendored takeover). #599 and #497 still reproduce, and #497 also gives a falsenot_affectedfrom lockfile-only defaultvex(commented). New: #861. A vendored re-run after a new dependent duplicates abun.lockbtarball record, and isolated frozen installs fail EEXIST intermittently on 1.3.9/1.4.2. The other new cells pass: the run 20 section below.Run 21 (new main
9c43dfc): #861 still reproduces. No new issue. The isolated-workspace member-run shape (hostedscanfrom a member:success, nothing pinned) is now tracked on #884 (commented), and is no longer a known non-bug. Three generic npm-family findings were handed to npm. The other new cells pass: the run 21 section below.Run 22 (main unchanged at
9c43dfc, so no re-triage): no new bugs. All the new cells pass: multi-package and large-tree (express)bun.lockbhosted / vendored / takeover by writers 1.1.45–1.4.2, two versions of one patched package (nested + direct, and per workspace member), and scopedrollback/removeof one of two same-name pins. See the run 22 section below.Run 23 (main unchanged at
9c43dfc, so no re-triage): no new issue. #861 also reproduces whenbun addruns inside an existing member (commented). All the new cells pass: a vendoredbun.lockbupgraded from binary format 2 to 3 by a newer Bun,bun.lockbtakeovers by writers 1.1.39 / 1.3.4 / 1.3.10,globalStore+ hosted workspace, and BOM / no-final-newline text locks. See the run 23 section below.Run 24 (main unchanged at
9c43dfc, so no re-triage): no new bugs. The Bun 1.3.10 text-lock row is now covered (agent hoisted + isolated, hosted, rollback byte-exact). A hosted 1.2.0 workspacebun.lockbupgraded to format 3 by 1.4.2 picks up a superseding uuid. Concurrent and SIGKILLed vendored runs, mixed-case names (JSONStream) and catalogs all pass. See the run 24 section below.Run 25 (main unchanged at
9c43dfc, so no re-triage): no new bugs. Mixed per-package modes (vendored ⇄ one package hosted, on text andbun.lockb, single and workspace, 1.2.23 / 1.3.9 / 1.4.2) pass, as doglobalStore+ vendored workspace lockb,overrides/resolutionsand Bun lock re-serializations. #861 also reproduces underglobalStore.bun removeof a vendored package leavesvendor --checkred with a no-op remedy; it's generic, so it was handed to npm (related #900). See the run 25 section below.Coverage matrix
bun patchvex: isolated linkerbun.lockbtakeover ⇄ revertglobalStore; fail #626 (first-party workspace member)Isolated-store edge cases after #496 (run 9, Linux)
+<hash>entries--backend=symlinkvexfresh clonevexafter in-place frozen reinstall (orphaned.bunentries)vexafter in-place reinstallvendored_tree_out_of_sync(#599)Bun
globalStore(machine-wide isolated store, Bun ≥ 1.3.14; run 10, Linux).bunentries patchedvexon stale/unpatched transitiveglobalStore = truevexverified, no false out-of-sync)BUN_INSTALL_GLOBAL_STORE=1globalStore = true, hosted isolated workspacenot_affected; after rollbackvexrefuses)Hosted pins and registry credentials (run 10, Linux)
No
Authorizationheader reaches the hosted tarball host for any of: bunfig default-registry token or basic auth,.npmrchost_authToken, global_authToken,always-auth, scoped.npmrc,[install.scopes]token,NPM_CONFIG_TOKEN. That holds on 1.4.2, 1.3.14, 1.2.23 and 1.1.45, cold-cache frozen installs: pass. Control: the same configs sendBearerto the configured registry.Platform-specific optional deps (run 10, Linux)
os/cpumeta (fsevents, @esbuild/darwin-arm64, @esbuild/linux-x64). The hosted rewrite keeps the meta, and Linux frozen installs fetch only linux-x64 (patched), on 1.1.45 v0 + lockb, 1.2.23, 1.3.14, 1.4.2 text + lockb: pass. Hosted rollback is byte-exact (1.4.2): pass.minimumReleaseAgewith hosted pins (1.4.2): pass.Run 25 cells (Linux, main
9c43dfc)get <purl> --mode hostedfor one package: cold frozen,vex(vendored + redirected),vendor --check,vendor --revertkeeps the hosted pin,rollbackget <purl> --mode vendoredfor one package: cold frozen,vex,rollbackunwinds bothglobalStore = true+ vendored isolated workspace lockb: cold frozen,vex,vendor --checkoverrides/resolutionsforcing the patched version: hosted + vendoredbun install --lockfile-only,--force,bun add <present>,bun remove <other>bun remove <vendored pkg>→vendor --checkget --mode agenton a vendored package → scopedrollback→bun installvexhonestRun 24 cells (Linux, main
9c43dfc)bun.lockbwritten by 1.2.0 (format 2),bun addby 1.4.2 (format 3), superseding uuid, lockfile-only hosted re-run, cold frozen install,vexupdatesnames the new uuid, MARK2 installed,vexattests the new record's vuln; 1.2.0 can't read format 3, same as a socket-patch-free control)rollbackrollbackbyte-exactvendor --revertbyte-exactscans (text v2)lock_held, the others serialize;vendor --checkclean)bun.lockbscan SIGKILLed at 5–60 ms: cold frozen install, re-run,vendor --check,vendor --revert(bun pm hash-stringequals the original)JSONStream@1.3.5: hosted, vendored,vex,vendor --revert, agent +rollback, on text v2 +bun.lockbcatalog:+ namedcatalog:old) in an isolated v2 workspace: vendored, vendored → hosted takeover,rollbackbyte-exact--dry-runhosted / vendored on an isolated workspacebun.lockb(no writes);get <purl> --mode vendored(member copies written, only that package wired)get <purl> --mode hostedfor one package)Run 23 cells (Linux, main
9c43dfc)bun.lockbformat 2, upgraded to format 3 by a 1.4.2bun add: re-run,vendor --revert, scopedrollback/remove, vendored → hostedbun.lockbhosted, hosted → vendored, vendored → hosted,vendor→vendor --revertglobalStore = true+ hosted isolated workspace: sibling project, in-placevex,rollbackbun.lockwith a UTF-8 BOM, or with no final newline: hosted, rollback, vendored, revert (byte-exact)bun addinside an existing member1.4.2-canary.20261005.1Run 22 cells (Linux, main
9c43dfc)bun.lockb(5 patches, scoped + nestedms): hosted, vendored,vex, semanticvendor --revertms@2.1.2+ directms@2.1.3, both patched: text v2 + lockb × hoisted + isolated × hosted + vendored; hostedrollback pkg:npm/ms@2.1.2keeps the other pinvendor --revertbun adda new dependent → vendored re-run → 4× cold frozenms@2.0.0/ms@2.1.3): hosted lockb, vendored lockb, vendored text v2, hosted text v1remove pkg:npm/ms@2.0.0on those vendored workspace lockbs: member copies removed, other version kept,vendor --checkbun install --force→vexrefuses →applyre-patchesRun 21 cells (Linux, main
9c43dfc)+<hash>×2): apply, no cache write-through,vex,rollback; a new peer variant →vexrefuses →applypatches only itbun.lock/bun.lockb0664 (hosted + vendored); agent bin file 0755 / 0777 through apply + rollbackrollbackbyte-exact + frozen install, text v1 single + workspacebun.lockbhosted → vendored → revert; vendored → hosted → rollback refusal; single + workspacebun.lock+ stalebun.lockb: hosted / vendored,vex,vendor --check, frozenbun.lockb/bun.lock, vendoredscan/get --mode hostedfrom an isolated workspace memberbun.lock+package-lock.jsonvendored →vendor --checkbun.lockwired + stalepackage-lock.jsonwithout the package → lockfile-onlyvexRun 20 cells (Linux, main
6811b4e)bun.lockb→ new member depending on the patched pkg →bun install→ vendored re-run → fresh frozen installpackages/*/*, dir with space/ü/#, peer workspace edge, nameless root, dir ≠ namecatalog:+ namedcatalogs:workspacebun.lockb: hosted, frozen by each readerbun.lockb: frozen,vex, byte-exact revert; deleted member mirror →vendor --check/vexfail closed →repairbun.lockbhosted supersede; lockfile-only vendored takeovernode_modules)vexRun 19 cells (Linux)
.gitignore*.tgz/vendor//.socket/→ commit → fresh-clone frozen installbun.lockb, 1.2.23 text v1, 1.1.45bun.lockb, 1.4.2 v2 isolated workspacevendor --check0 undervendor//.socket/;vexfails closed)bun cion the #803 shape (workspacebun.lockb+workspace:*, hosted, migrated to text by 1.4.2)bun.lockbre-serialized by a rootbun add; fresh frozen install;vexcore.autocrlf=true: frozen,vendor --check,vex,vendor --revert, post-revert installcore.autocrlf=true: frozen,vex,rollback(CRLF kept), post-rollback installRun 18 cells (Linux)
--max-new-patches 1over 2 hidden pinsbun.lockbwithout inter-workspace deps →--save-text-lockfileby 1.4.2 → fresh frozen installrollback→bun install, workspace (hoisted default)bun addinside a workspace member after hostedbun.lockbvex(Known non-bugs)bun.lock, hostedredirect_symlinked_file_unsupported, nothing written)rollback <purl>with 2 hosted pins → frozen install; then fullrollbackbyte-exactbun.lockbre-serialized bybun addRun 17 cells (Linux)
bun.lockb→--save-text-lockfile→ hosted → vendored takeover → fresh frozen install →vendor --revertbun.lockb→--save-text-lockfile→ fresh frozen installbun.lockb→--save-text-lockfile→ fresh frozen installget <purl> --mode hostedpicks up a superseding uuid; frozen install;rollbackRun 16 cells (Linux)
bun.lockb→bun install --save-text-lockfile: pins kept, install patched,list,rollback, fresh frozen installbun.lockb→--save-text-lockfile:vendor --revert/rollback/ hosted takeovervendor --revert→bun install--filter <name>/--filter ./path/--productionremove <purl>→ advised frozen install, hoisted, hosted + vendoredRun 15 cells (Linux)
bun.lockbmeta hash, numeric/alphanumeric prerelease pairs (beta.2/beta.10,1/alpha,rc.1/rc.1.0,x.9/x.10/x.100): hosted + frozen installsoptionalPeers,optionalDependencies,bin; npm aliases beside the direct copy: hosted, frozen install,vexvex/apply/rollbackrollback/vendor --revert→ advised in-placebun installrestores upstream bytes, hoistedRun 14 cells (Linux)
+) / legacy-uppercase / scoped dotted names: hosted, vendored, agent (isolated),vex, rollback,vendor --revertbun.lockb: hosted, frozen installs by each reader, hosted → vendored → revertX@1.0.0-beta.1+ nestedX@1.0.0(also under a scoped parent), text lockbun.lockb(patch on any package)link:target matching a patchedname@versionfile:passes, hosted / vendored safe)Run 13 cells (Linux)
bun.lockbnode_modules: pass)scan --mode vendoredover hosted pins (takeover)bun.lockbvendorcommand: pass)vex, exact heal)applyor a--jsonre-run)repairon a vendoredbun.lockbisolated workspace (deleted / corrupt artifact)bun ciand--productionfrozen installs with hosted pinsRun 12 cells (Linux)
bun.lockb: hosted / vendored scan, frozen installs,vex, idempotent re-run, rollback / revert; agent scan →vex→ rollbackbun.lockbwithoverrides+trustedDependencies, hosted and vendoreda b üandc#d, scoped patched dep: hosted, hosted → vendored, byte-exactvendor --revert, scopedremovegetby CVE / GHSA / UUID / PURL / scoped name, hosted + vendoredscan(hosted, vendored), midrollback, midvendor --revert; then re-runvexskip →repairrebuilds--offline/--prefer-offlinewith hosted pins + warm registry cache--offlinefails closed)yarn.lockscan --mode hostedheals it (same aspackage-lock.json)pnpm-lock.yamlIntegrityCheckFailed(see Known non-bugs)bun add→ re-run re-pins; lockfile-onlyvexattests nothing without a pinignorePathsover workspace members (hosted + agent)includePaths,minSeverityflag > file,!/tests/)Run 11 cells (Linux)
bin(semver): meta kept,.binlinked after frozen installbun.lockb(1.1.45 writer) withbin+ scoped packages, frozen install by each readerbun updatedrops hosted pins;vexthen refuses (manifest_not_found), no false attestationrollback/vendor --revertafter the migration"left-pad": "npm:is-number@6.0.0"), hosted + vendoredvendor --revert(byte-exact pre-hosted lock)bun.lockbworkspace with nested version keys, hosted (writers 1.1.45 and 1.4.2)lock_held); lockfile-only hostedvexpackage-lock.jsonscan --mode hostedheals it (see Known non-bugs)Global mode (
-g, agent; run 3)BUN_INSTALL_BINsetBUN_INSTALL_GLOBAL_DIRset-g --mode hostedrefusalbun.cmd)bun add -gfailed in the probe's space+unicode temp path)Untested: a non-writable global dir, a symlinked
BUN_INSTALL, and Bun 1.0.x.Bundled dependencies (
bundled: truelock entries; run 4)vexvexvex --no-verifynot_applied)Non-registry copies of a patched
name@version(run 5, Linux)vexvexvex --no-verifynot_applied)file:tgz)bun.lockb(URL tgz; run 6)github:tuplessocket.ymlpolicy and staged rollout (run 6, Linux)maxNewPatches: 1advancemaxNewPatches: 1advanceignorePackageskeeps pinenabled: falsewrites nothingsocket.ymlacross several independent Bun projects in one repo (run 7, Linux)includePaths(hosted, PATH glob)maxNewPatchesacross dirsminSeverityflag > env > fileignorePathskeeps pins byte-identical!/tests/re-include**/bun.lockbmarkerAgent mode applies path policy only at the scan root, so nested independent projects are always patched. That's generic, not Bun-specific: handed to npm (
entries/npm/20261002T072532Z-from-bun.md).Workspace members under ignored paths, and growth after a scan (run 8, Linux)
tests/member: agenttests/member: hosted (frozen patched)ignorePathsover members keeps them (agent / hosted / vendored)package-lock.json+bun.lockhosted.npmrcremoved)Between a scan and its re-run, an unwired registry copy of a patched
name@versionin the same lock is still attested by vendoredvexand by hostedvex --no-verify. npm does the same, so it's handed to npm (entries/npm/20261002T133747Z-from-bun.md), not filed as a Bun bug.Also passing in run 6: a dual-lock checkout (
bun.lock+ a stalebun.lockb, where Bun ≥ 1.2 readsbun.lockand hosted rewrites only it), and global mode with a symlinkedBUN_INSTALL(1.4.2: agent scan,vex -g,rollback -g).Lock-shape edge cases (run 5, Linux)
bun.lock+ CRLFpackage.json(1.1.45 v0, 1.3.14, 1.4.2): hosted scan → frozen install →rollback, and vendored →vendor --revert. Both byte-exact: pass.bun install --yarn(siblingyarn.lock), on 1.1.45 lockb, 1.2.23 and 1.4.2: hosted rewires both locks; lockbrollbackrefuses and touches neither file: pass.[install.scopes]custom-registry scope (1.3.14, 1.4.2): hosted rewrite and byte-exact rollback: pass.vexis correct: pass.bun addafter hosted (all four versions; the pins survive) and after vendored (digest-less re-save on < 1.3.10, healed by the re-run): pass.Takeovers and vendored VEX (run 4, Linux)
vendored_tree_out_of_syncis missing (1.4.2): fail, under With Bun's isolated linker,vexattests a hosted patch as not_affected (verified) while the installed copy under node_modules/.bun is still unpatched (v5 regression) #405 (comment). Hoisted control: pass.Other passes (Linux, 1.4.2 unless noted):
scan --global, and the (pre-v5)setuphook.SOCKET_GLOBAL=1≡-g;SOCKET_GLOBAL_PREFIX/--global-prefixscan only that dir;scan -ginside a project with a bunfig settingglobalDirdoesn't leak project dirs;vexwithout-gignores global copies.remove,repairandliston hosted pins.bun.lockbidempotency,--dry-run, and the rollback refusal.catalog:andoverrides.package.json.Backlog
-g) mode for hosted patches. Still to do: a non-writable global dir must fail loudly (needs a probe; the sandbox runs as root); Windows 1.1.45/1.2.23 with an ASCII temp path; Bun 1.0.x. Global mode misses every Bun global package when BUN_INSTALL_BIN or BUN_INSTALL_GLOBAL_DIR is set: scan -g reports success with nothing found, get -g / vex -g patch and attest nothing #443 is still open; re-test On Windows,scan -g/get -g/vex -gfind no global npm packages becausenpm root -gis spawned as barenpm, which never resolves tonpm.cmd#434 (bun.cmd) on Windows now that Fix global PM probes spawning bare names from the project (#421, #434, #438, #440) #442 has landed. Checklist: the 20261001T040000Z entry.bughunt/bun/20260930-default-trust,bughunt/bun/20260930-isolated-bunpatch,bughunt/bun/20261001-vex-isolatedandbughunt/bun/20261001-global-dirs. Deletion is still refused from the sandbox (runs 7–25), so no new probes until then.bun addvariant reproduces, run 23). Hosted scan/get run from a yarn classic workspace member still reports success while pinning nothing: the #598 governing-root refusal covers pnpm and cargo only #884 (Bun member shape) and Hosted and vendored Bun rewiring silently discards the project's ownbun patch(patchedDependencies): fresh frozen installs drop the user's patch with exit 0 #367 (PR Fix Bun rewiring dropping the project's bun patch (#367) #873): re-test when merged.*.tgz,vendor/,.socket/), so the commit drops it and every fresh checkout's install fails #831: re-test on Bun (text,bun.lockb, workspace) once Fix vendored npm-family tarballs dropped by .gitignore (#831) #837 lands. After a Bun rollback orvendor --revert, the advisedbun installkeeps the patched bytes installed on the hoisted linker (Bun reports "no changes") #764 follow-up: macOS/Windows. Real Windows autocrlf checkouts.*.tgz,vendor/,.socket/), so the commit drops it and every fresh checkout's install fails #831, After Bun migrates a vendored bun.lockb to bun.lock (bun install --save-text-lockfile), vendor --revert and rollback fail, and a superseding re-vendor drops the pre-vendor original so revert exits 0 with the project still vendored #784, After a Bun rollback orvendor --revert, the advisedbun installkeeps the patched bytes installed on the hoisted linker (Bun reports "no changes") #764, With Bun's globalStore (Bun ≥ 1.3.14), agent mode patches and rolls back every other project sharing the store, and vex attests unpatched transitive copies as not_affected #635, With Bun's isolated linker,vexrefuses every hosted patch as not_applied after the usual in-placebun install, because it checks orphanednode_modules/.bunregistry entries that Bun never removes (regression from #496) #599 and Bun hosted and vendored modes skip a URL orfile:tarball copy of the patched package without warning, and vendoredvexattests not_affected (the #326 fix covers npm locks only) #497: re-test when fixed. Agent-mode apply writes through node_modules links into first-party source (npm workspace members, file: deps, npm link targets), overwriting the user's code, and rollback restores upstream bytes instead #626 on Bun once PR Fix agent mode patching linked first-party source (#626) #634 merges. AlsoglobalStore+ workspaces andglobalStoreon macOS/Windows. (Fix npm store copies missed by agent apply and vex (#601, #603) #605/Fix store-copy fold dropping copy writes (#756, #772) #774 store copies on Bun peer-variant entries: pass, run 21.)vexattests a hosted patch as not_affected (verified) while the installed copy under node_modules/.bun is still unpatched (v5 regression) #405 / Bun hosted and vendored rewiring rewritesbundled: truelock entries that Bun never fetches: the bundled copy stays unpatched, scan reports success, and vendoredvexattests not_affected #469 / After Bun 1.4 migrates a hosted workspace bun.lockb to bun.lock,bun install --frozen-lockfilefails and Bun's suggestedbun installsilently drops the hosted pins #803 fixes (Windows isolated uses junctions).file:tarball copy of the patched package without warning, and vendoredvexattests not_affected (the #326 fix covers npm locks only) #497github:tuples (needs a probe).trustedDependencieson a rewired package with a postinstall. (Mixed modes,globalStore+ vendored workspace lockb: pass, run 25.)Known non-bugs
patches-api.socket.devis blocked by the sandbox proxy. Mock the API. Also, the CLI's reqwest can't reachregistry.npmjs.orgfrom the sandbox (curl can), so hosted rollback/remove needSOCKET_NPM_REGISTRYpointed at a local passthrough. Without it you getcannot restore … error sending request, which is a sandbox artifact.rollback→missing_blobwhen the mock serves no before-blob (fixture limit).rollbackremoves the rolled-back entries from.socket/manifest.json, so a laterapplyis a success no-op (CLI_CONTRACTrollbackrow).bun.lockbpins:rollback/removerefuse with thegit checkout -- bun.lockbremedy (documented). After a hosted → vendored →vendor --revertround trip,bun.lockbis semantically identical (samebun pm hashand yarn dump) but not byte-identical: its string buffer keeps the dead URLs. The doc promises a byte-exact registry record, not the whole file.linker = "isolated"). From Bun 1.3.x a fresh workspace lock defaults to isolated.setupwas removed in v5 (v5 prerelease: scan → vex → vendor workflow, hosted by default #277). The run-1setuppass is obsolete.bun pm untrustedbut has no observable effect. Use better-sqlite3 to observe On Bun ≥ 1.3.5, hosted and vendored rewiring drops Bun's default trust, so install scripts of patched packages (better-sqlite3, esbuild, sharp…) are silently blocked #371.redirect_bun_workspace_unsupported), a pre-v2 workspace lock in vendored mode (vendor_bun_workspace_unsupported), and missing digest enforcement for text-lock URL/local tuples on Bun < 1.3.10.--global-prefixmust name thenode_modulesdir itself (~/.bun/install/global/node_modules). Its parent scans 0 packages; the flag is documented as the packages root.-gcombined with--mode hostedis a clap-level conflict: plain-text error, exit 2, no JSON envelope even with--json. Consistent with other usage errors.scan --dry-runexits 0 withstatus: successandwould_refusewhile the real run exits 1 withpartial_failure, for the same Bun preflight refusal. Documented (CLI_CONTRACTwould_refuse).vexattests from the committed artifact even when the installed tree is stale. By design: only avendored_tree_out_of_syncwarning is owed.vexon a bundled-copy project correctly refuses (not_applied). Bun hosted and vendored rewiring rewritesbundled: truelock entries that Bun never fetches: the bundled copy stays unpatched, scan reports success, and vendoredvexattests not_affected #469 is about vendored mode and--no-verify.bun pm bin -gignores a project-localbunfig.toml, soscan -ginside a project can't be redirected by the project.bun add, on Bun < 1.3.10 re-saves the local tuples withoutsha512. That's documented ("Digest-less re-saves"): the vendored re-run reportsalready_vendoredand re-pins the digest.""as the registry field of a tuple even when it came from an[install.scopes]or custom default registry, so rollback restoring""is correct.bun install --yarnproject, hostedrollbackrestoresbun.lockbyte-exact but adds a#<sha1>fragment to Bun'syarn.lockresolvedlines. It's semantically equivalent and yarn-classic's rewriter, so it isn't filed as a Bun bug.IntegrityCheckFailed.link:deps needbun linkregistration, andgithub:deps don't resolve in the sandbox. Both are environment limits.scan <workspace-member>(e.g.scan packages/a) with vendored refusingvendor_lockfile_missingis pinned behaviour. The hosted side (success, 0 redirected) is NOT a non-bug any more: since run 21 it's tracked on Hosted scan/get run from a yarn classic workspace member still reports success while pinning nothing: the #598 governing-root refusal covers pnpm and cargo only #884 (the isolated-workspace Bun matrix is commented there).scan -gis report-only. Use--mode agentto patch global copies.-gagent runs record the global copies in the cwd's.socket/manifest.json(by design).bun.lockcan't be read by Bun 1.1.45 (lockfile had changes, but lockfile is frozen) even without socket-patch. Whenbun.lockandbun.lockbare both present, Bun ≥ 1.2 readsbun.lock.SOCKET_PATCH_SERVER_URLmust name the same origin across runs. A mock on another port makes the earlier pins non-hosted.node_modulesand warnsredirect_bun_entry_not_foundfor their packages (exit 0). They have their own locks: scan them by PATH (scan '*/*' --mode hosted).blob/<hash>route. Without it the result ispartial_failure.vendor_bun_workspace_unsupported. That's the documented pre-v2 workspace limitation, and the lock is untouched.vexexit 2product_undetectedin a fixture without a package version or git origin: pass--product(fixture limit).node_modules/.bunentries: after a dependency is removed, its store dir (and, on 1.4.2, the member link) stays. That's Bun behaviour. It only matters to socket-patch through With Bun's isolated linker,vexrefuses every hosted patch as not_applied after the usual in-placebun install, because it checks orphanednode_modules/.bunregistry entries that Bun never removes (regression from #496) #599.applyon a workspace whose member links into an isolated store reports a duplicatealready_patchedskip per member-linked package (counts only, the bytes are right). pnpm behaves the same, so it's handed to pnpm (entries/pnpm/20261002T193154Z-from-bun.md).scan -gwithBUN_INSTALL_GLOBAL_DIRset reports the Node global prefix's packages, not Bun's. That's Global mode misses every Bun global package when BUN_INSTALL_BIN or BUN_INSTALL_GLOBAL_DIR is set: scan -g reports success with nothing found, get -g / vex -g patch and attest nothing #443, not a new bug.vexattests darwin-only packages (fsevents, @esbuild/darwin-*) on a Linux checkout where they're not installed: the lock pins patched bytes for every platform, so that's correct.SOCKET_PROXY_URLandSOCKET_PATCH_SERVER_URL. Without the latter, hosted pins aren't recognized andvexreportsmanifest_not_found.package-lock.jsonwritesbun.lockregistry 4-tuples with the hosted URL in the registry slot (["left-pad@1.3.0", "http://…/tok/<uuid>/left-pad-1.3.0.tgz", {}, "sha512-…"]). Bun installs the patched bytes from them. socket-patch fails closed on that shape (vex→patched_ref_unattributable/manifest_not_found,list/rollback→hosted_wiring_contested, no writes), and a re-run ofscan --mode hostedheals it into the canonical URL tuple. No false attestation, so not filed (run 11). Thevexdetail wording ("from elsewhere (not a Socket patch)") is inaccurate for this shape.bun updatere-resolves hosted pins back to the registry. That's Bun behaviour, andvexcorrectly stops attesting.bun.lockbcan't be read by Bun 1.1.45 even without socket-patch.yarn.lockwrites the same registry-slot 4-tuples as thepackage-lock.jsoncase, plus a#<sha1>fragment. socket-patch fails closed, and a re-run ofscan --mode hostedheals it (run 12).pnpm-lock.yaml(1.3.14, 1.4.2) ignoresresolution.tarball, downloads the registry tarball and failsIntegrityCheckFailedagainst the patched sha512, writing nobun.lock. That's a Bun migration limitation and fails closed. Remedy: migrate first, then runscan --mode hosted.get <pkg> --mode hostedfrom inside a workspace member dir is asuccessno-op withredirect_npm_no_lockfile, the same asscan <member>: tracked on Hosted scan/get run from a yarn classic workspace member still reports success while pinning nothing: the #598 governing-root refusal covers pnpm and cargo only #884 since run 21. Run it from the root.vendor --revertcan leave a 0-byte.socket/vendor/.socket-stage-state.json-<uuid>temp file. It's harmless; the next run heals the state.scan --mode agentdoesn't re-apply patches the manifest already records ([skip] … already recorded, "runsocket-patch apply"), while--jsonre-applies. It's generic, not Bun-specific: handed to npm (entries/npm/20261003T193043Z-from-bun.md). After an interrupted agent apply, usesocket-patch apply.scan --jsonapply.patches[].action(added/skipped) is the manifest record's state, not whether files were written.repairdoesn't recreate a deletedsocket-patch.vendor.jsonsidecar. It's informational only (CLI_CONTRACT). A deleted.socket/vendor/state.json→repairvendor_ledger_missing(documented v5: restore it from VCS).vexdoesn't attest them, and the re-run heals.[install] registry) restores"". It's pinned by thecustom-registryshape inbacktest-bun.py, and the restored lock frozen-installs from the configured registry (run 14).X@2.0.0+build.6to an installedX@2.0.0+build.5, because semver ignores build metadata. That's Bun behaviour.file:directory deps intonode_modules, so agent mode patches the copy, not the source. That's safe and not part of Agent-mode apply writes through node_modules links into first-party source (npm workspace members, file: deps, npm link targets), overwriting the user's code, and rollback restores upstream bytes instead #626.SOCKET_PATCH_SERVER_URL. Otherwise the registry URLs Bun writes intobun.lockblook like hosted pins, and vendoredrollbackfailshosted_wiring_contested(run 15; with split origins it'ssuccess).bun.lockblegacy (link://) meta-hash dialect isn't produced by any writer in range (≥ 1.1.39); numeric prerelease ordering in the current dialect matches Bun (run 15).bun installwith only abun.lockbkeeps the binary lock on 1.2.23 / 1.3.14 / 1.4.2. Only--save-text-lockfilemigrates it (run 16).scan --mode vendoredon abun.lockb(exit 1), so it isn't a baseline for vendored-lockb cells (run 16)."m1": "packages/m1") in a textbun.lockwith only registry tuples frozen-installs on 1.3.14 and 1.4.2. Only together with URL/local pins does 1.4.2 re-resolve, which is After Bun 1.4 migrates a hosted workspace bun.lockb to bun.lock,bun install --frozen-lockfilefails and Bun's suggestedbun installsilently drops the hosted pins #803 (run 17).bun add <pkg>run inside a workspace member re-resolves that member's dependencies and drops its hosted pins back to registry tuples, on text v1/v2 andbun.lockb(1.2.23 / 1.3.14 / 1.4.2). A root-levelbun addkeeps them. That's Bun behaviour, likebun update: a re-run ofscan --mode hostedheals it, andvexdoesn't attest the dropped pin (run 18).scan --mode vendoredskips the takeover, both reporting success with 0 packages #720), somaxNewPatchesneither counts nor defers them, and nothing is unwired (run 18).vendor --revertin acore.autocrlf=trueclone, the restored registry line inbun.lockis LF inside an otherwise CRLF working copy. Git normalizes it on commit (byte-exact to the pre-vendor commit) and Bun reads it, so it's cosmetic. Hostedrollbackkeeps CRLF on every line (run 19).pkill -f mock.pyalso matches the calling shell, whose command line contains the heredoc. Kill the mock by pidfile.bun.lockbworkspaces commit an identical tarball under every member's.socket/vendor, even members that don't use the package. That's deliberate (Bun 0.5.9–1.3 resolves workspace local tarballs relative to the declaring member,bun_binary.rs:142). A missing member copy fails closed (vendor_workspace_artifact_missing), andrepairrestores it (run 20).workspace:*(root@workspace:* failed to resolve), so that After Bun 1.4 migrates a hosted workspace bun.lockb to bun.lock,bun install --frozen-lockfilefails and Bun's suggestedbun installsilently drops the hosted pins #803-heal shape can't occur (run 20).bun.lockwritten by 1.4.2 (lockfile had changes). That's cross-version Bun behaviour.get <name> --mode hostedwith several installed versions (e.g.ms@2.0.0nested +ms@2.1.3direct) acts on only one: the package-name path searches just the best fuzzy match among installed purls, by design (get.rs:2844), and names it on stderr. It isn't Bun-specific. Usescanor a purl (run 22).node_modulesbefore committing, or "fresh" clones aren't empty (run 22).bun install --save-text-lockfileon 1.4.2 deletesbun.lockb;bun bun.lockbprints the ACTIVE lock (the text one when both exist). Inspect a stale binary withstrings(run 21).vexexit 2manifest_not_found("nothing to attest") after every patch is rolled back or reverted is correct (run 25).get --mode agenton an already-vendored package doesn't take it over: the manifest and the vendored ledger coexist, and a scopedrollbackunwinds both (run 25).All reactions