Skip to content

chore(schema): strict oneOf branches and DRY env_directive in schemas#6271

Merged
jdx merged 6 commits intomainfrom
chore/schema-strict-required
Sep 11, 2025
Merged

chore(schema): strict oneOf branches and DRY env_directive in schemas#6271
jdx merged 6 commits intomainfrom
chore/schema-strict-required

Conversation

@jdx
Copy link
Owner

@jdx jdx commented Sep 11, 2025

Summary

  • Tighten JSON schema validation and reduce duplication. Schema-only changes.

Changes

  • In schema/mise.json: annotate oneOf branches for env_directive with explicit required properties.
  • In schema/mise-task.json:
    • Same strict oneOf annotations for env_directive.
    • DRY env._.path object forms by referencing #/$defs/env_directive (both direct object and array-item object variants).

Why

  • Ensures strictRequired validation passes during lint.
  • Centralizes repeated shapes for easier maintenance.

Impact

  • No runtime behavior changes; documentation and tooling validation only.

jdx added 3 commits September 11, 2025 11:51
…\n\nfix(tasks): abort subsequent spawns after first failure when not using --continue-on-error\n\nchore(schema): strict oneOf branches define required properties\n\nRefs: discussions#6255
Copilot AI review requested due to automatic review settings September 11, 2025 16:51
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR tightens JSON schema validation and reduces duplication by adding strict oneOf branch validation and implementing DRY principles for env_directive definitions.

  • Adds explicit type and properties declarations to oneOf branches in env_directive schemas for stricter validation
  • Replaces duplicated env_directive object definitions with $ref references to the centralized definition
  • Ensures all oneOf branches have complete type and property specifications for better schema compliance

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 6 comments.

File Description
schema/mise.json Added explicit type and properties to env_directive oneOf branches for stricter validation
schema/mise-task.json Replaced duplicated env_directive definitions with $ref references and added strict oneOf branch validation

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment on lines +40 to +48
"type": "object",
"properties": {
"path": {
"oneOf": [
{ "type": "string" },
{ "type": "array", "items": { "type": "string" } }
]
}
},
Copy link

Copilot AI Sep 11, 2025

Choose a reason for hiding this comment

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

The path property definition is duplicated here from the parent properties section (lines 10-21). This creates maintenance overhead since changes to the path schema need to be updated in multiple places.

Copilot uses AI. Check for mistakes.
Comment on lines +52 to +58
"type": "object",
"properties": {
"paths": {
"type": "array",
"items": { "type": "string" }
}
},
Copy link

Copilot AI Sep 11, 2025

Choose a reason for hiding this comment

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

The paths property definition is duplicated here from the parent properties section (lines 23-28). This creates maintenance overhead since changes to the paths schema need to be updated in multiple places.

Copilot uses AI. Check for mistakes.
Comment on lines +166 to +174
"type": "object",
"properties": {
"path": {
"oneOf": [
{ "type": "string" },
{ "type": "array", "items": { "type": "string" } }
]
}
},
Copy link

Copilot AI Sep 11, 2025

Choose a reason for hiding this comment

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

The path property definition is duplicated here from the parent properties section (lines 140-151). This creates maintenance overhead and should reference the parent definition or use a $ref to avoid duplication.

Copilot uses AI. Check for mistakes.
Comment on lines +178 to +184
"type": "object",
"properties": {
"paths": {
"type": "array",
"items": { "type": "string" }
}
},
Copy link

Copilot AI Sep 11, 2025

Choose a reason for hiding this comment

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

The paths property definition is duplicated here from the parent properties section (lines 153-158). This creates maintenance overhead and should reference the parent definition or use a $ref to avoid duplication.

Copilot uses AI. Check for mistakes.
Comment on lines +528 to +536
"type": "object",
"properties": {
"path": {
"oneOf": [
{ "type": "string" },
{ "type": "array", "items": { "type": "string" } }
]
}
},
Copy link

Copilot AI Sep 11, 2025

Choose a reason for hiding this comment

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

The path property definition is duplicated here from the parent properties section (lines 498-509). This creates maintenance overhead since changes to the path schema need to be updated in multiple places.

Copilot uses AI. Check for mistakes.
Comment on lines +540 to +546
"type": "object",
"properties": {
"paths": {
"type": "array",
"items": { "type": "string" }
}
},
Copy link

Copilot AI Sep 11, 2025

Choose a reason for hiding this comment

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

The paths property definition is duplicated here from the parent properties section (lines 511-516). This creates maintenance overhead since changes to the paths schema need to be updated in multiple places.

Copilot uses AI. Check for mistakes.
@github-actions
Copy link

Hyperfine Performance

mise x -- echo

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2025.9.8 x -- echo 19.4 ± 0.4 18.7 22.4 1.00 ± 0.03
mise x -- echo 19.3 ± 0.3 18.8 20.9 1.00

mise env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2025.9.8 env 18.8 ± 0.5 18.3 24.3 1.01 ± 0.03
mise env 18.7 ± 0.2 18.3 19.8 1.00

mise hook-env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2025.9.8 hook-env 18.4 ± 0.2 17.9 19.5 1.00
mise hook-env 18.5 ± 0.3 18.0 21.6 1.01 ± 0.02

mise ls

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2025.9.8 ls 16.2 ± 0.2 15.7 17.1 1.00
mise ls 16.7 ± 0.5 16.0 18.3 1.03 ± 0.03

xtasks/test/perf

Command mise-2025.9.8 mise Variance
install (cached) 167ms ✅ 103ms +62%
ls (cached) 63ms 63ms +0%
bin-paths (cached) 69ms 69ms +0%
task-ls (cached) 468ms 481ms -2%

✅ Performance improvement: install cached is 62%

@jdx jdx merged commit 5e02aff into main Sep 11, 2025
17 checks passed
@jdx jdx deleted the chore/schema-strict-required branch September 11, 2025 17:24
@jdx jdx mentioned this pull request Sep 11, 2025
jdx added a commit that referenced this pull request Sep 11, 2025
### 🐛 Bug Fixes

- **(backend)** make HTTP installs atomic and serialize with cache lock
by @jdx in [#6259](#6259)
- **(env)** allow nested env._.path directives by @risu729 in
[#6160](#6160)
- **(env)** disallow nested env objects by @risu729 in
[#6268](#6268)
- **(schema)** allow nested arrays in task.depends by @risu729 in
[#6265](#6265)
- **(task)** resolve jobs=1 hang and keep-order panic; improve Ctrl-C
handling by @jdx in [#6264](#6264)
- **(tasks)** stop CLI group after first failure without
--continue-on-error by @jdx in
[#6270](#6270)

### 📚 Documentation

- fixed toml issues in URL replacements settings documentation by
@ThomasSteinbach in [#6269](#6269)

### Chore

- **(schema)** strict oneOf branches and DRY env_directive in schemas by
@jdx in [#6271](#6271)
- add schema linter by @risu729 in
[#6267](#6267)

Co-authored-by: mise-en-dev <release@mise.jdx.dev>
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Sep 19, 2025
## [2025.9.12](https://github.com/jdx/mise/compare/v2025.9.11..v2025.9.12) - 2025-09-16

### 🐛 Bug Fixes

- **(ci)** properly exclude aqua-registry files from hk linting by @jdx in [42d7758](jdx/mise@42d7758)

### Chore

- **(release)** embed aqua-registry under crate and publish like vfox by @jdx in [#6306](jdx/mise#6306)
- ignore aqua-registry assets from prettier by @jdx in [047d77b](jdx/mise@047d77b)
- disable "useless cat" shellcheck by @jdx in [a6def59](jdx/mise@a6def59)

## [2025.9.11](https://github.com/jdx/mise/compare/v2025.9.10..v2025.9.11) - 2025-09-16

### 📦 Registry

- indicate aws-cli is v2 by @jayvdb in [#6300](jdx/mise#6300)

### 🚀 Features

- **(ci)** run all registry tools when workflow_dispatch is triggered by @jdx in [#6295](jdx/mise#6295)
- **(cli)** handle non-existent working directories gracefully by @jdx in [#6304](jdx/mise#6304)
- **(set)** add -E/--env flag to mise set command by @jdx in [#6291](jdx/mise#6291)
- **(tasks)** make auto outputs default by @risu729 in [#6137](jdx/mise#6137)

### 🐛 Bug Fixes

- align crate versions to fix release-plz script by @jdx in [5a464e9](jdx/mise@5a464e9)

### 🚜 Refactor

- **(aqua)** extract aqua registry into internal subcrate by @jdx in [#6293](jdx/mise#6293)

### 📚 Documentation

- fix mkdir paths by @risu729 in [#6298](jdx/mise#6298)
- fix rust profile default by @risu729 in [#6305](jdx/mise#6305)

### Chore

- **(aqua-registry)** remove unused aqua-registry files by @jdx in [#6294](jdx/mise#6294)
- **(release)** make release-plz idempotent for existing crate versions by @jdx in [dbdfd6a](jdx/mise@dbdfd6a)
- **(release)** skip publishing mise when aqua-registry is a path dep by @jdx in [47efffd](jdx/mise@47efffd)
- keep aqua-registry LICENSE file by @risu729 in [#6297](jdx/mise#6297)

### New Contributors

- @jayvdb made their first contribution in [#6300](jdx/mise#6300)

## [2025.9.10](https://github.com/jdx/mise/compare/v2025.9.9..v2025.9.10) - 2025-09-13

### 📦 Registry

- use asdf to install semver-tool by @jylenhof in [#6233](jdx/mise#6233)

### 🐛 Bug Fixes

- **(tool-stub)** detect binary names from single-file downloads by @jdx in [#6281](jdx/mise#6281)

### 🚜 Refactor

- allow any collection types in deserialize_arr by @risu729 in [#6282](jdx/mise#6282)
- use deserialize_arr for task runs by @risu729 in [#6253](jdx/mise#6253)

### 📚 Documentation

- **(getting-started)** add backends step with diagram, github example, env vars and simple tasks by @jdx in [#6288](jdx/mise#6288)
- simplify OS detection in tool plugin development by @jdx in [#6287](jdx/mise#6287)
- update backend plugin template references by @jdx in [942f5eb](jdx/mise@942f5eb)

### 📦️ Dependency Updates

- update rust crate chrono to v0.4.42 by @renovate[bot] in [#6274](jdx/mise#6274)
- update taiki-e/install-action digest to 0154864 by @renovate[bot] in [#6273](jdx/mise#6273)

### Chore

- **(schema)** fix schema for subtasks by @risu729 in [#6289](jdx/mise#6289)
- update render:schema task by @risu729 in [#6275](jdx/mise#6275)

## [2025.9.9](https://github.com/jdx/mise/compare/v2025.9.8..v2025.9.9) - 2025-09-11

### 🐛 Bug Fixes

- **(backend)** make HTTP installs atomic and serialize with cache lock by @jdx in [#6259](jdx/mise#6259)
- **(env)** allow nested env._.path directives by @risu729 in [#6160](jdx/mise#6160)
- **(env)** disallow nested env objects by @risu729 in [#6268](jdx/mise#6268)
- **(schema)** allow nested arrays in task.depends by @risu729 in [#6265](jdx/mise#6265)
- **(task)** resolve jobs=1 hang and keep-order panic; improve Ctrl-C handling by @jdx in [#6264](jdx/mise#6264)
- **(tasks)** stop CLI group after first failure without --continue-on-error by @jdx in [#6270](jdx/mise#6270)

### 📚 Documentation

- fixed toml issues in URL replacements settings documentation by @ThomasSteinbach in [#6269](jdx/mise#6269)

### Chore

- **(schema)** strict oneOf branches and DRY env_directive in schemas by @jdx in [#6271](jdx/mise#6271)
- add schema linter by @risu729 in [#6267](jdx/mise#6267)

## [2025.9.8](https://github.com/jdx/mise/compare/v2025.9.7..v2025.9.8) - 2025-09-10

### 🐛 Bug Fixes

- **(tasks)** prevent hang when task fails in sequence by @jdx in [#6260](jdx/mise#6260)
- **(version)** fetch mise version if cached version is older than the current by @risu729 in [#6252](jdx/mise#6252)

### 📦️ Dependency Updates

- update rhysd/action-setup-vim action to v1.4.3 by @renovate[bot] in [#6249](jdx/mise#6249)

## [2025.9.7](https://github.com/jdx/mise/compare/v2025.9.6..v2025.9.7) - 2025-09-09

### 🐛 Bug Fixes

- **(env)** allow mixed map for env._.file by @risu729 in [#6148](jdx/mise#6148)
- **(tasks)** restore parallel starts with poetry via list_paths cache and stable exec-env cache by @jdx in [#6237](jdx/mise#6237)
- add 'unknown' to the list of OS patterns by @efussi in [#6235](jdx/mise#6235)
- propagate errors from backend installs by @jdx in [#6236](jdx/mise#6236)

### 📦️ Dependency Updates

- update taiki-e/install-action digest to 0c5db7f by @renovate[bot] in [#6244](jdx/mise#6244)
- update golang docker tag to v1.25.1 by @renovate[bot] in [#6247](jdx/mise#6247)
- update dependency vitepress to v1.6.4 by @renovate[bot] in [#6246](jdx/mise#6246)

### New Contributors

- @efussi made their first contribution in [#6235](jdx/mise#6235)
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