`vp run --plan`: print what a run would do, without running it
Mantenedores costumam responder em até 1 dia
@wan9chi já está trabalhando nisso.
Desde 2/10/2026.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
Start at the vp run CLI entry point and trace the existing selection, dependency resolution, compound splitting, ordering, and cache-status handling. Done means --plan performs the usual resolution, prints the requested text or JSON plan, exits without executing tasks, and writes no cache.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Summary
vp run resolves a lot before it executes anything: which packages the selection
picks, each package's task, the commands after compound splitting, the dependsOn
edges and their order, and whether a task would replay from cache. None of it can be
asked for. A --plan flag would print that resolution and exit, in text or JSON, the
way pip install --dry-run --report -, make -n, turbo run --dry=json and
bazel aquery do for their runs.
Motivation
Anything built around a task runner eventually needs to know what a run would do:
- a pre-tool hook for coding agents that decides whether a shell command is about to
start something expensive (a type checker, a browser suite) before letting it run; - CI that picks jobs from the task graph instead of from path globs;
- a repository doctor or lint rule that checks task wiring ("does this
dependsOn
reach the task it means to?", "which packages drop out of-rfor this task?"); - a person or an agent asking "what does
vp run -r testactually run, in what order?"
Today the only route is to load every vite.config.* yourself and re-implement the
selection rules, the dependsOn forms (task, pkg#task, { task, from }), compound
splitting and ordering, then keep that copy in step with Vite+. The existing surfaces
do not cover it: -v and --last-details describe a run after it ran, the interactive
selector is for a person choosing one task, and loadConfigFromFile resolves one
config with no selection, no edges and no cache status.
Prior art
pip install --dry-run --report -: resolve, print the JSON report, install nothing.make -n/--dry-run: print the commands that would run.just --dry-run,gradle --dry-run: list the recipes / tasks that would execute.turbo run <task> --dry/--dry=json: per task,taskId,package,command,
hash,inputs,outputs,dependencies,dependents, cache status.bazel aquery: the actions (commands) a build would execute.nx run-many -t <task> --graph=stdout: the task graph the command would execute.
Proposal
vp run --plan [--json] <the usual selection: -r | -t | -w | --filter … | [pkg#]task> [--ignore-depends-on]
Same resolution as a real run, then print and exit 0; execute nothing, write no cache.
Text output: one line per task in execution order, package task: command, with
← dep markers for edges. JSON output:
{
"selection": { "packages": ["@acme/app", "@acme/core"], "task": "build" },
"tasks": [
{
"id": "@acme/core#build",
"package": "@acme/core",
"task": "build",
"commands": ["tsdown", "node scripts/emit-types.mjs"],
"dependsOn": [],
"cache": "replay"
},
{
"id": "@acme/app#build",
"package": "@acme/app",
"task": "build",
"commands": ["vp build"],
"dependsOn": [{ "id": "@acme/core#build", "kind": "topological" }],
"cache": "execute"
}
]
}
commandsare the sub-tasks after compound splitting (&&or array form), since
those are what Vite Task runs and caches.dependsOnentries carrykind:explicit(adependsOnentry) ortopological
(package-graph order), because the two are what a wiring check needs to tell apart.cacheisreplay,executeordisabledwhen the plan already knows it; if input
hashing is too costly to do just to answer--plan,unknownis fine and an opt-in
--plan=hashcan come later.
Non-goals: not a visualisation (#1182 asks for that; --plan --json is an input it
could consume), and not a change to --last-details.
How we hit it
In a 128-package workspace we wrote an agent hook that needed one bit: does this
vp run … start a TypeScript compiler? Answering it faithfully meant loading all 128
configs (about 1.8 s per call) and carrying ~500 lines that re-implemented selection
and dependsOn. We replaced that with a hard-coded list of task names, which is exactly
what --plan would retire; a lint rule in the same repo reads run.tasks out of the
config AST for the same reason. Happy to test a preview against that workspace.
Related
- #1182 (dependency graph visualisation) and #1167 (consolidated recursive output)
need the same resolved list;--planis its static, machine-readable form. - #1231 (hint when config load exceeds 500 ms) is the same gap from the timing side.
- voidzero-dev/vite-task#738 (
dependsOnobject form cannot reach a task behind a
package that lacks it) is the kind of wiring fact a plan with labelled edges shows
directly.
- Linguagem predominante
- Rust
- Estrelas
- 6.5k
- Forks
- 297
- Merge médio
- 20h 56min
- PRs com merge (30d)
- 234
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de voidzero-dev/vite-plus
-
triage: not actionable
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
voidzero-dev/vite-plus#3296 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
pending triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 63/100
voidzero-dev/vite-plus#3235 ·
Mantenedores costumam responder em até 1 dia
-
Docker guide: the runtime stage needs libatomic1 for Node.js 25 and laterTalvez já em andamento @kshanxs assumiu há 8 dias. Abertadocumentation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
voidzero-dev/vite-plus#3219 · 2 comentários · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
pending triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
voidzero-dev/vite-plus#2882 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
e2e-failure
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 18/100
voidzero-dev/vite-plus#3302 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de voidzero-dev/vite-plus
Issues semelhantes
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 70/100
OpenZeppelin/openzeppelin-relayer#967 ·
Mantenedores costumam responder em até 1 dia
-
DecisionOutcome::label() / n_dosed(): engine-side mapping so downstream needs no wildcard armAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
src/runs.rs:1987: a missing --source-run-id now answers 400 "Source run ... does not exist", not 404Abertanightly-audit
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
antithesishq/snouty#602 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
libnativeapi/nativeapi#21 ·