Skip to content

fix(config): name the unknown field when a task config doesn't parse - #815

Merged
wan9chi merged 3 commits into
voidzero-dev:mainfrom
tlq5l:fix/task-config-unknown-field-2635
Oct 19, 2026
Merged

wan9chi merged 3 commits into
voidzero-dev:mainfrom
tlq5l:fix/task-config-unknown-field-2635

Conversation

@tlq5l

@tlq5l tlq5l commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Refs voidzero-dev/vite-plus#2635

Motivation

A mistyped setting in a task, such as cache: { outputs: ["dist/**"] } (the field is output), fails with an error that names neither the key nor what is accepted:

* data did not match any variant of untagged enum UserTaskDefinition

UserTaskDefinition and UserCacheConfig were #[serde(untagged)], which discards each variant's own error. They now pick the variant from the value's type, so the real error comes through:

* unknown field `outputs`, expected one of `env`, `untrackedEnv`, `input`, `output`, `remote`

Valid configs parse as before and run-config.ts is unchanged. The error still doesn't name the task; that needs path tracking in the config loaders.

The main report in the issue (a cache hit that doesn't restore files) is already fixed by #461.

AI-assisted with Claude Opus 5.5.

tlq5l and others added 3 commits October 7, 2026 04:04
A mistyped task setting such as `cache: { outputs: [...] }` failed with
"data did not match any variant of untagged enum UserTaskDefinition".
Deserialize `UserTaskDefinition` and `UserCacheConfig` by value type so
the error of the form the user wrote is shown instead.

Refs voidzero-dev/vite-plus#2635

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Replace the hand-written `Visitor` impls for `UserTaskDefinition` and
`UserCacheConfig` with `serde_untagged::UntaggedEnumVisitor`. Error
messages are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedcargo/​serde-untagged@​0.1.910010093100100

View full report

@wan9chi wan9chi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you! I pushed to simplify a little bit with serde-untagged.

@wan9chi
wan9chi merged commit 8db455e into voidzero-dev:main Oct 19, 2026
20 checks passed
cursor Bot added a commit to voidzero-dev/vite-plus that referenced this pull request Oct 21, 2026
Bumps vite-task from `9ba4cc9` to `8db455e`.

Changelog:
voidzero-dev/vite-task@9ba4cc9...8db455e#diff-06572a96a58dc510037d5efa622f9bec8519bc1beab13c9f251e97e657a9d4ed

## Breaking change adapted

fspy no longer reports a bitset of access modes on each path. Each
tracked operation is its own `PathAccess` (`Read`, `Write`, `ReadWrite`,
or `ReadDir`). `vp_command` combines the operations that touch the same
workspace-relative path into the existing `AccessMode` set, so the
JavaScript `run_command` result is unchanged.

## User-facing vite-task changes

- A mistyped task setting now fails with an error that names the field,
instead of `data did not match any variant of untagged enum
UserTaskDefinition` (voidzero-dev/vite-task#815).
- `vp run` no longer panics on scripts that contain non-ASCII
characters, and no longer cuts those commands off where it displays them
(voidzero-dev/vite-task#861).
- Reinstalling with another pnpm version no longer changes the cache
fingerprint of `node_modules/.modules.yaml`; only whether the file
exists is hashed (voidzero-dev/vite-task#850).
- Cached tasks on Linux and macOS no longer abort when a program passes
`-1` as a directory descriptor, and concurrent syscalls in tracked
programs no longer overflow the stack (voidzero-dev/vite-task#862,
voidzero-dev/vite-task#854).

Docs are unchanged. These are fixes to existing behavior, and the guides
do not describe the old error text or the `.modules.yaml` fingerprint.

## Validation

- `cargo check --workspace --all-features --all-targets --locked`
- `cargo clippy -p vp_command -p vite-plus-cli --all-targets
--all-features -- --deny warnings`
- `cargo test` for `vp_command`, `vp_error`, `vp_pm_cli`,
`vp_js_runtime`, `vp_migration`, `vp_shared`, `vp_static_config`,
`vite-plus-cli`, and `vp_global_cli`


<div><a
href="https://cursor.com/agents/bc-9c9cb178-3b56-4d68-9556-3028d946a3ec?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/assets/images/open-in-web-light.png"><img
alt="Open in Web" width="114" height="28"
src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a
href="https://cursor.com/automations/3a586a0e-cc2b-11f1-bec7-b2318963e0b6"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/assets/images/view-automation-dark.png"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/assets/images/view-automation-light.png"><img
alt="View Automation" width="141" height="28"
src="https://cursor.com/assets/images/view-automation-dark.png"></picture></a>&nbsp;</div>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Charles Wang <wan9chi@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants