voidzero-dev / voidzero-dev/vite-task

Windows cached task hangs after first compound command when stdio pipe remains open

Open
#485 1 comment 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
466
Forks
42
Avg merge
1d 15h
Merged PRs (30d)
19

Description

Summary

On Windows, a cached vp run task can hang after the first command in a compound script has completed, before the next && command starts.

This was reproduced with a script shape similar to:

{
  "scripts": {
    "test": "cargo test -p ox_mf2_parser --all-targets --color always && vp test"
  }
}
Reproduction

Repro repo: https://github.com/kazupon/vite-task-windows-issue-1
(cause repo: https://github.com/intlify/intlify)

In GitHub Actions, the normal cached Windows run hangs, while the Windows --no-cache control run completes successfully.

Observed behavior

The cached run prints and completes the cargo test output, but never prints or starts the following $ vp test command.

Process snapshots show only the vpr / vp / node runner process tree remaining. No cargo, rustc, or vitest process remains. At workflow cleanup, GitHub Actions reports an orphaned vctip process.

Expected behavior

After the direct child process for the first command exits, the runner should observe completion and continue to the next && command, even if a descendant temporarily keeps stdout/stderr handles open.

Suspected cause

The cached execution path drains piped stdout/stderr before awaiting the direct child process. On Windows, if a descendant keeps an inherited pipe handle open, EOF never arrives, so the runner never reaches child wait or Windows Job Object cleanup.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the cached execution path and its Windows child-process stdout/stderr pipe handling, then reproduce the compound command using the linked repro repository and compare it with the --no-cache run. Done means the cached Windows run proceeds to the second command after the first child exits, without leaving an orphaned vctip process.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, rust
Domain
cli, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.