Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Existence probes of pnpm-workspace.yaml become content inputs, so any manifest edit misses every task

Aberta
#860 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@lifeiscontent já está trabalhando nisso.

Desde 20/10/2026.

  • #869 de @lifeiscontent — aberto

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
45/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
rust, vite, yaml
Domínio
build-system, tooling

Direção de pesquisa

Start with packages/vite/src/node/server/searchRoot.ts, the Unix access/stat interceptions, and crates/vt/src/session/execute/fingerprint.rs to trace how workspace-root existence checks become content inputs. Reproduce with a small pnpm workspace and repeated vp run -r test executions, then verify the fix distinguishes probe-only existence checks from tasks that read manifest contents. Done means unrelated edits no longer invalidate probe-only tasks, while actual reads and marker creation or deletion still affect caching.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

In a pnpm workspace, every task that loads a Vite config records pnpm-workspace.yaml (and lerna.json) in every ancestor directory as a content input. An edit to an unrelated line of pnpm-workspace.yaml, for example a new catalog entry that no package uses, then misses the cache of every task. In our 199-task monorepo one such edit dropped a repeat run to 1 cache hit out of 184 tasks.

The reads come from Vite's searchForWorkspaceRoot (packages/vite/src/node/server/searchRoot.ts), which calls fs.existsSync on those names in each ancestor to find the root. fspy records access and stat as READ (crates/fspy_preload_unix/src/interceptions/access.rs, stat.rs; AccessMode in crates/fspy_shared/src/ipc/mod.rs has only READ, WRITE and READ_DIR), and the fingerprint then hashes the file content (crates/vt/src/session/execute/fingerprint.rs). So a probe that only asks "does this file exist" becomes a dependency on the file's bytes.

Repro with vite-plus 1.3.0:

  1. A workspace with three packages, each with a vite.config.ts and a test task, and a root pnpm-workspace.yaml with packages: [packages/*] and a catalog: block.
  2. vp run -r test twice. The second run is all cache hits.
  3. Add an unused line to the catalog, for example left-pad: 1.3.0, and run vp run -r test again. Every task misses with 'pnpm-workspace.yaml' modified.

ignoreInput from vite-plus does not fix this correctly. It drops the path for the whole task, so a task whose own code reads the manifest (a catalog lint, for example) would replay a stale result, and creating or deleting a marker file, which can change the workspace root Vite selects, would no longer invalidate anything.

A fix that keeps both properties would record existence probes separately: fingerprint whether the path exists for a probe-only access, and promote the path to a content input when the same task also opens and reads it. stat may need care, because some callers use size or mtime.

Linguagem predominante
Rust
Estrelas
478
Forks
48
Merge médio
1d 5h
PRs com merge (30d)
65

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de voidzero-dev/vite-task

Todas as issues de voidzero-dev/vite-task

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.