Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

fspy misses Bun file reads on Linux (glibc), so cached tasks replay stale output

未关闭
#777 1 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 1 天内回复

@wan9chi 已经在做这个了。

开始于 2026年9月30日。

评估

这个 Issue 还没有评估数据。

描述

fspy

Note: This issue was written by an AI agent (Claude) on behalf of @chenxin-yan. The reproduction below was run and checked; the suspected cause is marked as unconfirmed.

On Linux with glibc, automatic input tracking does not see files that Bun reads. A cached task that runs bun then replays stale output after one of those files changes. The same read done by node is tracked correctly.

This is the Linux counterpart of #532. #542 fixed it for macOS only.

Reproduction

package.json:

{ "name": "vt-bun-repro", "private": true, "type": "module", "devDependencies": { "vite-plus": "1.0.0" } }

vite.config.ts:

import { defineConfig } from "vite-plus";

export default defineConfig({
  run: {
    tasks: {
      "read-node": `node -e "console.log(require('fs').readFileSync('data.txt', 'utf8'))"`,
      "read-bun": `bun -e "console.log(require('fs').readFileSync('data.txt', 'utf8'))"`,
    },
  },
});
echo v1 > data.txt
npm install
npx vp run read-node && npx vp run read-bun   # populate the cache
echo v2 > data.txt
npx vp run read-node
npx vp run read-bun

Output after the change:

$ node -e "..." ○ cache miss: 'data.txt' modified, executing
v2
$ bun -e "..." ◉ cache hit, replaying
v1

bun build behaves the same way: editing its entry file is not detected. We first saw this through crust build, which bundles with an embedded Bun. Edits to the CLI's TypeScript sources replayed a stale bundle, while reads done by Node were tracked. Listing the sources in cache.input works around it.

Environment

  • vite-plus 1.0.0 (also 1.0.0-rc.1)
  • Bun 1.4.2, and the Bun embedded in @crustjs/crust 0.5.0
  • Node 26.10.0 and 24.21.0
  • Linux 6.18 x86_64, glibc 2.42 (NixOS)

Suspected cause (unconfirmed)

According to crates/fspy/README.md, fspy on glibc Linux uses LD_PRELOAD for dynamically linked executables, and seccomp_unotify only for fully static binaries. Bun is dynamically linked against glibc (ldd lists libc.so.6), so only the preload path applies. Under strace, Bun's reads of the edited files appear as ordinary openat system calls. They seem to be issued directly rather than through the interposed libc functions. I have not confirmed this inside Bun's source.

Ask

Observe Bun's file accesses on Linux, for example through the seccomp path. Alternatively, fail closed or warn when a traced process's reads cannot be observed. Silently replaying stale output means a cached build or check can pass on changed inputs.

主要语言
Rust
星标
468
派生
42
平均合并
1 天 3 小时
30 天内合并 PR
41

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

voidzero-dev/vite-task 的其他 Issue

查看 voidzero-dev/vite-task 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。