Context
labelle-studio (the new desktop editor) wants to surface toolchain updates without parsing human-oriented CLI output or mutating anything — see labelle-toolkit/labelle-studio#7. It needs a read-only, machine-readable "what is outdated" query for two things:
- The CLI itself — is a newer
labelle available than the installed one?
- A project's pins — for a given
project.labelle, which of its pinned packages (core/engine/gfx/assembler/plugins) have newer releases available?
Studio must notify, never auto-bump — pins are deliberate per-project choices. So this is a pure query; the existing labelle upgrade <pkg> / labelle update keep owning the actual mutation.
Proposal
Add --check --json (read-only, no writes, exit 0 even when updates exist) to the upgrade/update surface:
labelle update --check --json → installed CLI version, latest available, update_available: bool.
labelle upgrade --check --json (run in / pointed at a project) → per-package array:
{
"cli": { "installed": "1.48.0", "latest": "1.51.0", "update_available": true },
"packages": [
{ "name": "assembler", "pinned": "0.74.2", "latest": "0.75.0", "update_available": true },
{ "name": "engine", "pinned": "1.68.0", "latest": "1.68.0", "update_available": false }
]
}
Requirements
- Read-only: never edits
project.labelle, never installs. --check implies dry-run.
- Stable JSON schema (versioned field or documented shape) so studio can depend on it.
- Distinguish "no newer release" from "could not reach the release endpoint" (a
checked/error field per entry) so studio can show "offline" vs "up to date".
- Ideally reuse whatever release-endpoint resolution
labelle update/upgrade already use, so the check and the actual upgrade agree.
Consumer
Blocks the pin-check + feature-gated version-hint slice of labelle-toolkit/labelle-studio#7 (e.g. turning a bare TemplateNotFound into "Play mode requires assembler 0.74+, this project pins 0.55.1 → Upgrade", and surfacing "assembler 0.74.2 → 0.75.0 available"). The feature-gated minimum-version hints can ship studio-side without this (studio knows its own feature min-versions); the latest-available comparison needs this query.
Context
labelle-studio (the new desktop editor) wants to surface toolchain updates without parsing human-oriented CLI output or mutating anything — see labelle-toolkit/labelle-studio#7. It needs a read-only, machine-readable "what is outdated" query for two things:
labelleavailable than the installed one?project.labelle, which of its pinned packages (core/engine/gfx/assembler/plugins) have newer releases available?Studio must notify, never auto-bump — pins are deliberate per-project choices. So this is a pure query; the existing
labelle upgrade <pkg>/labelle updatekeep owning the actual mutation.Proposal
Add
--check --json(read-only, no writes, exit 0 even when updates exist) to the upgrade/update surface:labelle update --check --json→ installed CLI version, latest available,update_available: bool.labelle upgrade --check --json(run in / pointed at a project) → per-package array:{ "cli": { "installed": "1.48.0", "latest": "1.51.0", "update_available": true }, "packages": [ { "name": "assembler", "pinned": "0.74.2", "latest": "0.75.0", "update_available": true }, { "name": "engine", "pinned": "1.68.0", "latest": "1.68.0", "update_available": false } ] }Requirements
project.labelle, never installs.--checkimplies dry-run.checked/errorfield per entry) so studio can show "offline" vs "up to date".labelle update/upgradealready use, so the check and the actual upgrade agree.Consumer
Blocks the pin-check + feature-gated version-hint slice of labelle-toolkit/labelle-studio#7 (e.g. turning a bare
TemplateNotFoundinto "Play mode requires assembler 0.74+, this project pins 0.55.1 → Upgrade", and surfacing "assembler 0.74.2 → 0.75.0 available"). The feature-gated minimum-version hints can ship studio-side without this (studio knows its own feature min-versions); the latest-available comparison needs this query.