qctl 0.4.7

Control in-repo YAML work queues
# Loaded when MISE_ENV contains `dev` (local default via .miserc.toml).
# Compile this checkout. The Version PR loads it too, for the toolchain
# `[prepare].after` uses to regenerate Cargo.lock.

# mr_boxington on the rust entry needs mise 2026.9.2 or newer.
min_version = "2026.9.2"

[tools]
committed = "1.1.11"
lefthook = "2.1.10"
# Components are explicit: a bare `rust = "1.97.1"` resolves without
# rustfmt or clippy on a clean runner, which local rustup hides.
# mr_boxington routes Cargo through mr-boxington, locally and in CI, so
# worktrees and runs share one build store and one CPU and memory budget.
rust = { version = "1.97.1", components = "rustfmt,clippy", mr_boxington = true }
mr-boxington = "1.20.0"
"github:EmbarkStudios/cargo-deny" = "0.20.2"

[tasks.format]
description = "rustfmt check"
run = "cargo fmt --all -- --check"

[tasks.lint]
description = "clippy -D warnings"
run = "cargo clippy --all-targets --all-features -- -D warnings"

[tasks.test]
description = "Test suite"
run = "cargo test --all-features"
# Stops a hung test run instead of holding the gate. The limit also counts
# compile time and waits on the target/ lock, so it sits far above a cold build.
timeout = "30m"

[tasks.deny]
description = "License, ban, and source policy (offline)"
run = "cargo deny check licenses bans sources"

[tasks."deny:advisories"]
description = "RustSec advisories and yanked crates (network)"
run = "cargo deny check advisories"

[tasks.commit-msg]
description = "Lint the git commit-msg file with committed"
usage = 'arg "<file>" help="Path to the commit message file"'
run = 'committed --commit-file "${usage_file}"'

[tasks.commits]
description = "Lint commit messages with committed"
usage = 'arg "[commits]" default="HEAD" help="Commit or range"'
run = 'committed "${usage_commits}"'

[tasks.verify]
description = "CI-safe gate: format, clippy, test, deny"
depends = ["format", "lint", "test", "deny"]

[tasks.build]
description = "Build the release binary"
run = "cargo build --release"

[tasks.snapshots]
description = "Read and accept what a verb wrote, one scenario at a time"
# The reviewer is the task's own tool, at the library's version. CI loads this
# file for the toolchain and never reviews, so it should not fetch this.
tools = { "github:mitsuhiko/insta" = { version = "1.48.0", exe = "cargo-insta" } }
run = "cargo insta review"

[tasks.schema]
description = "Regenerate schema/tasks.schema.json from the ledger types"
run = "cargo run --quiet -- schema"