Skip to content

refactor(schema): reuse task props with unevaluatedProperties#9582

Merged
jdx merged 7 commits intojdx:mainfrom
risu729:codex/schema-tombi-unevaluated
May 6, 2026
Merged

refactor(schema): reuse task props with unevaluatedProperties#9582
jdx merged 7 commits intojdx:mainfrom
risu729:codex/schema-tombi-unevaluated

Conversation

@risu729
Copy link
Copy Markdown
Contributor

@risu729 risu729 commented May 3, 2026

Summary

  • Restore task and task template schemas to allOf + unevaluatedProperties now that Tombi supports the evaluated-property behavior needed here.
  • Keep task_props in the generated included-task schema so task properties are defined once instead of duplicated into task and template objects.
  • Use unevaluatedProperties: false consistently for closed object schemas across the other schema files too.
  • Update the Tombi schema e2e test to assert the pinned Tombi version and document why the pin is new enough.

Tombi support

Test plan

  • mise run render:schema
  • hk check schema/mise.json schema/mise-task.json schema/miserc.json schema/mise-settings.json schema/mise-registry-tool.json schema/mise.plugin.json xtasks/render/schema.ts
  • taplo check settings.toml registry/*.toml test/fixtures/mise.plugin.toml
  • mise run test:e2e config/test_schema_tombi

This PR was generated by an AI coding assistant.

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 3, 2026

Greptile Summary

This PR refactors the mise JSON schema to eliminate duplicated task property definitions by introducing a shared task_props def that task and task_template close over via allOf + unevaluatedProperties. It also consistently replaces additionalProperties: false with unevaluatedProperties: false across all schema files, which is the semantically correct keyword for schemas that reference other defs through applicators.

  • The crawlReferencedDefs helper now transitively follows every $ref in the graph, so task_props (and all its transitive deps) is properly included in the generated mise-task.json — the previous dangling-ref concern is resolved.
  • All six affected schema files already declared \"$schema\": \"https://json-schema.org/draft/2020-12/schema\", so unevaluatedProperties is fully within vocabulary for every file changed.
  • The e2e test gains a version-assertion line (assert_contains \"$TOMBI --version\" \"tombi $TOMBI_VERSION\") to confirm the pinned Tombi binary is actually the one being exercised.

Confidence Score: 5/5

The changes are schema-only (no runtime logic), every schema file already declares JSON Schema 2020-12, and the ref-crawling fix ensures generated files are self-contained.

The generator correctly propagates task_props into mise-task.json through transitive $ref traversal, closing the dangling-reference gap from the previous version. Replacing additionalProperties: false with unevaluatedProperties: false on schemas that have no applicators is semantically neutral, and on schemas with allOf/$ref it is the correct fix. No runtime Rust code changes.

No files require special attention.

Reviews (12): Last reviewed commit: "Merge branch 'main' into codex/schema-to..." | Re-trigger Greptile

Comment thread xtasks/render/schema.ts Outdated
Comment thread xtasks/render/schema.ts Outdated
@risu729 risu729 force-pushed the codex/schema-tombi-unevaluated branch 2 times, most recently from f6b582c to f692e29 Compare May 4, 2026 05:03

This comment was marked as outdated.

@risu729 risu729 force-pushed the codex/schema-tombi-unevaluated branch from f692e29 to 118c5c7 Compare May 5, 2026 20:21
@risu729

This comment was marked as outdated.

@risu729 risu729 force-pushed the codex/schema-tombi-unevaluated branch from 118c5c7 to 79867e2 Compare May 5, 2026 20:52
@risu729 risu729 force-pushed the codex/schema-tombi-unevaluated branch from 79867e2 to 095a910 Compare May 5, 2026 20:58
@risu729

This comment was marked as outdated.

@risu729 risu729 marked this pull request as ready for review May 6, 2026 22:58
@jdx jdx merged commit fa75acf into jdx:main May 6, 2026
32 of 33 checks passed
@risu729 risu729 deleted the codex/schema-tombi-unevaluated branch May 6, 2026 23:38
jdx pushed a commit that referenced this pull request May 7, 2026
## Why
#9582 moved the generated schemas onto the JSON Schema draft 2020-12
shape we need for `allOf` + `unevaluatedProperties`. Once we rely on
that behavior, the remaining schema files should use the draft 2020-12
definition namespace consistently.

Keeping `definitions` around works in some validators as legacy
compatibility, but it leaves these files half-migrated: new reusable
schema pieces are expected to live under `$defs`, while older local refs
still point at `#/definitions/...`. This PR finishes that migration for
the settings and registry-tool schemas so follow-up schema refactors can
add shared definitions without mixing two local-ref conventions.

## What changed
- Migrates `schema/mise-settings.json` and
`schema/mise-registry-tool.json` from `definitions` to `$defs`.
- Updates local refs from `#/definitions/...` to `#/$defs/...`.
- Keeps the accepted schema values unchanged; this is a namespace/ref
cleanup for draft 2020-12 consistency.

## Validation
- `jq empty schema/mise-settings.json schema/mise-registry-tool.json`
- `git diff --check`

This PR was generated by an AI coding assistant.
mise-en-dev added a commit that referenced this pull request May 7, 2026
### 🚀 Features

- **(aqua)** support registry libc variants by @jdx in
[#9652](#9652)
- **(bin-paths)** add executable names output by @risu729 in
[#9617](#9617)

### 🐛 Bug Fixes

- **(aqua)** preserve configured file extensions by @risu729 in
[#9611](#9611)
- **(aqua)** support registry file links by @risu729 in
[#9610](#9610)
- **(backend)** reject bare package backend names by @risu729 in
[#9608](#9608)
- **(backend)** apply inline tool option overrides by @risu729 in
[#9306](#9306)
- **(backend)** skip versions host for local tool opts by @risu729 in
[#9568](#9568)
- **(github)** chmod explicit archive bin by @risu729 in
[#9609](#9609)
- **(install)** skip remote-versions refresh in prefer-offline mode by
@jdx in [#9627](#9627)
- **(lock)** scope targets to active project root by @risu729 in
[#9319](#9319)
- **(lockfile)** respect existing platforms during auto-lock by @jdx in
[#9621](#9621)
- **(pipx)** filter yanked pypi releases by @risu729 in
[#9607](#9607)
- **(pipx)** declare python as a backend dependency by @jdx in
[#9678](#9678)
- **(schema)** update refs to $defs in mise-registry-tool.json by
@risu729 in [#9671](#9671)
- **(task)** terminate parallel siblings on failure via process groups
by @jdx in [#9655](#9655)
- **(task)** stable MISE_PROJECT_ROOT for monorepo tasks, add
MISE_MONOREPO_ROOT by @jdx in
[#9657](#9657)
- **(trust)** run enter hooks after trusting config by @risu729 in
[#9634](#9634)
- **(ui)** stop clearing screen for prompts by @jdx in
[#9619](#9619)
- use /bin/cp on macos by @pdehlke in
[#9656](#9656)

### 🚜 Refactor

- **(aqua)** store aqua var defaults as strings by @risu729 in
[#9645](#9645)
- **(config)** support structured TOML values in registry backend
options by @risu729 in [#9584](#9584)
- **(deps)** remove serde_derive dependency by @risu729 in
[#9670](#9670)
- **(deps)** remove anyhow dependency by @risu729 in
[#9661](#9661)
- **(deps)** use std::sync::LazyLock instead of once_cell::Lazy by
@risu729 in [#9668](#9668)
- **(schema)** generate task schema from mise schema by @risu729 in
[#9581](#9581)
- **(schema)** reuse task props with unevaluatedProperties by @risu729
in [#9582](#9582)
- **(schema)** reuse registry common types by @risu729 in
[#9648](#9648)
- **(schema)** reuse plugin script config by @risu729 in
[#9647](#9647)
- **(schema)** use $defs in schema files by @risu729 in
[#9646](#9646)

### 📚 Documentation

- **(node)** add tips for enabling node idiomatic by @fu050409 in
[#9675](#9675)

### 🧪 Testing

- **(cli)** remove nondeterministic tool depends assertion by @risu729
in [#9633](#9633)
- **(e2e)** pin uv to 0.11.8 around astral-sh/uv#19278 by @jdx in
[#9618](#9618)
- **(e2e)** wait for docker env cleanup by @risu729 in
[#9631](#9631)
- **(zig)** use official zig instead of mach mirror by @jdx in
[#9659](#9659)

### 📦️ Dependency Updates

- fall through to hash check when providers have no outputs by @jdx in
[#9622](#9622)
- bump Cargo.lock by @jdx in
[#9625](#9625)

### 📦 Registry

- remove registry depends by @risu729 in
[#9571](#9571)
- add code-review-graph (pipx:code-review-graph) by @chautruonglong in
[#9673](#9673)

### Chore

- **(ci)** split large registry test-tool changes by @risu729 in
[#9628](#9628)
- **(ci)** make perf script robust to runner noise by @jdx in
[#9635](#9635)
- **(ci)** skip hyperfine comments without permission by @risu729 in
[#9629](#9629)

### New Contributors

- @chautruonglong made their first contribution in
[#9673](#9673)
- @pdehlke made their first contribution in
[#9656](#9656)

## 📦 Aqua Registry Updates

### New Packages (5)

-
[`anthropics/anthropic-cli`](https://github.com/anthropics/anthropic-cli)
- [`crates.io/wasmi_cli`](https://github.com/wasmi-labs/wasmi)
- [`openclaw/gogcli`](https://github.com/openclaw/gogcli)
- `racket-lang.org/racket-minimal`
- [`runs-on/cli`](https://github.com/runs-on/cli)

### Updated Packages (13)

- [`UpCloudLtd/upcloud-cli`](https://github.com/UpCloudLtd/upcloud-cli)
- [`aristocratos/btop`](https://github.com/aristocratos/btop)
- [`dprint/dprint`](https://github.com/dprint/dprint)
- [`j178/prek`](https://github.com/j178/prek)
- [`jdx/hk`](https://github.com/jdx/hk)
- [`jdx/mise`](https://github.com/jdx/mise)
- [`jdx/usage`](https://github.com/jdx/usage)
- [`jreleaser/jreleaser`](https://github.com/jreleaser/jreleaser)
-
[`jreleaser/jreleaser/standalone`](https://github.com/jreleaser/jreleaser)
- [`pnpm/pnpm`](https://github.com/pnpm/pnpm)
- [`suzuki-shunsuke/cmdx`](https://github.com/suzuki-shunsuke/cmdx)
- [`suzuki-shunsuke/ghir`](https://github.com/suzuki-shunsuke/ghir)
- [`twpayne/chezmoi`](https://github.com/twpayne/chezmoi)
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