Added
runner doctor --jsonschema v3 (now the default fordoctor):
the flat detection dump becomes a structured diagnostic inventory —
invocation/environment/runnerprovenance, per-ecosystems
decisions with aconfidencegrade derived from the resolution step
(override/manifest/lockfile → high, PATH probe → medium, legacy npm
fallback → low, failure → none), tasksourcesas first-class objects,
fqn-keyedtaskswith effectiveresolvedcommands, PATH-probed
tools, duplicate-task-nameconflicts(which task wins, which are
shadowed, and why), flatteneddiagnostics, and a self-describing
resolutionpolicy block. Implements the formerdoctor.v3-draft
schema; the real output validates against both the committed
doctor.v3.schema.jsonand the original draft. Draft shapes nothing
can emit yet (rich dependency edges, workspace identity, probe errors)
are deferred, not declared. v1/v2 remain available via
--schema-version; human output is unchanged.runner why --jsonschema v3 (now the default forwhy): the
report is restructured around{task, match}candidate pairs plus a
decisionblock. Each task carries a stable identity
(fqn=root:<kind>#<name>,provider,kind— cargo aliases are
now labeledcargo-alias), its origin (sourcefile,
source_pointerkey path), and resolution data (definition,
resolvedcommand preview,cwd, siblingaliases,
dependencies). Thematchhalf exposes the exact run-time selection
key (source_priority,depth,display_order, alias-last), and
decision.strategynames the branch taken (single-candidate,
ranked,filtered,exec-fallback). Implements the former
why.v3-draftexample, which the real output now reproduces verbatim;
v1/v2 stay available via--schema-version.listremains at v2 — its
v3 draft is still under review, and it rejects--schema-version 3
rather than mislabel output.schema --allemits the committed
schemas/why.v3.schema.json, and the example validates against it.- Both v3 schemas use the
<scope>:<kind>#<name>fqn form, with#
separating the structured prefix from the verbatim task name so a name
containing:(e.g. an npm scriptfmt:update) stays unambiguous. - Deno tasks now run without the
denobinary. Adeno.json/
deno.jsonctask whose command is a leaf shell command executes
in-process via the embeddeddeno_task_shell(deno's own cross-platform
task shell) whendenoisn't onPATH; withdenoinstalled it still
shells out todeno taskfor full fidelity. Theunstable-deno-exec
feature flips the default to self-exec-first. Tasks that invokedeno
themselves or declaredependenciesstill need the binary. The shell
engine lives in a reusabletool::shellso other shell-string task
sources can build on it later. - Deno task descriptions. The object form
("build": { "command": "…", "description": "…" }) is now parsed and
the description surfaces inrunner list/why/doctor, alongside
the existing bare-string form. runner listand the barerunnerview now print a duplicate-name
conflict footer. When two sources define the same task name (e.g. a
justrunrecipe andcargo run), it names the source that
runner run <name>actually dispatches and the ones it shadows — using
the same precedence as dispatch — so a silently shadowed task no longer
goes unnoticed.
Changed
- Cargo built-in aliases now fold under their canonical subcommand in
runner listand the barerunnerview.b/c/d/t/r/rmare
shown as aliases of the promotedbuild/check/doc/test/run/
removetasks (e.g.test (t)) instead of standing alone; both the
canonical name and the short form still dispatch. Aliases that carry
extra arguments (bb,cl,rq, …) keep their own rows. Promoting
run/removecan collide with a same-namedjust/other task — that
collision now surfaces in the conflict footer above rather than hiding. runner doctor --json(v3) now probes package-manager and task-runner
versions via<tool> --version(previously only the Node runtime
carried a version), reports a per-taskself_executableflag (true for
deno tasks runner can run through the embedded shell), and derives the
Deno tool'srequiredfrom it. Node is included inecosystems/
toolswhenever a resolver or task signal implies it, not only when a
Node package manager was lockfile-detected.- The committed v3 schemas (
doctor.v3.schema.json,
why.v3.schema.json) setadditionalProperties: falsethroughout, so
validation catches stray or misspelled fields in real output instead of
silently accepting them.
What's Changed
- Emit JSON output schemas by @kjanat in #50
- Forward --help/--version to task in
runalias by @kjanat in #54
Full Changelog: v0.13.0...v0.13.1